Gitlab CI多分支部署:master/test分支分服务器部署可行吗?
当然可以实现!
GitLab CI 完全支持根据不同分支执行差异化的部署逻辑,核心是通过分支匹配规则来区分不同分支对应的操作步骤。我来给你具体讲讲怎么配置:
方案一:拆分独立的部署Job(推荐)
这种方式把构建和部署拆分开,每个分支对应单独的部署Job,逻辑更清晰,也方便你单独查看不同分支的部署状态:
# 通用构建步骤:所有目标分支都先执行Maven构建 maven_build: script: - mvn install rules: - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "test"' # 部署到服务器10.10.10.1(仅master分支推送时触发) deploy_to_prod_server: script: # 通过SSH远程执行服务器上的部署命令(需确保Runner能免密登录该服务器) - ssh your_username@10.10.10.1 "/opt/payara41/bin/asadmin --passwordfile /home/asadminpass --user admin undeploy myApplication-ear-1.0-SNAPSHOT" - ssh your_username@10.10.10.1 "sudo /etc/init.d/glassfish restart" - ssh your_username@10.10.10.1 "/opt/payara41/bin/asadmin deploy target/myApplication-ear-1.0-SNAPSHOT.ear" rules: - if: '$CI_COMMIT_BRANCH == "master"' needs: [maven_build] # 依赖构建Job完成后再执行部署 # 部署到服务器10.10.10.2(仅test分支推送时触发) deploy_to_test_server: script: # 同理执行测试服务器的部署命令 - ssh your_username@10.10.10.2 "/opt/payara41/bin/asadmin --passwordfile /home/asadminpass --user admin undeploy myApplication-ear-1.0-SNAPSHOT" - ssh your_username@10.10.10.2 "sudo /etc/init.d/glassfish restart" - ssh your_username@10.10.10.2 "/opt/payara41/bin/asadmin deploy target/myApplication-ear-1.0-SNAPSHOT.ear" rules: - if: '$CI_COMMIT_BRANCH == "test"' needs: [maven_build]
方案二:单Job内通过条件判断分支
如果希望把构建和部署放在同一个Job里,也可以用Shell条件判断来区分分支对应的操作:
maven_build_and_deploy: script: # 先执行通用的Maven构建 - mvn install # 根据当前分支判断要部署到哪台服务器 - | if [ "$CI_COMMIT_BRANCH" = "master" ]; then # 部署到生产服务器10.10.10.1 ssh your_username@10.10.10.1 "/opt/payara41/bin/asadmin --passwordfile /home/asadminpass --user admin undeploy myApplication-ear-1.0-SNAPSHOT" ssh your_username@10.10.10.1 "sudo /etc/init.d/glassfish restart" ssh your_username@10.10.10.1 "/opt/payara41/bin/asadmin deploy target/myApplication-ear-1.0-SNAPSHOT.ear" elif [ "$CI_COMMIT_BRANCH" = "test" ]; then # 部署到测试服务器10.10.10.2 ssh your_username@10.10.10.2 "/opt/payara41/bin/asadmin --passwordfile /home/asadminpass --user admin undeploy myApplication-ear-1.0-SNAPSHOT" ssh your_username@10.10.10.2 "sudo /etc/init.d/glassfish restart" ssh your_username@10.10.10.2 "/opt/payara41/bin/asadmin deploy target/myApplication-ear-1.0-SNAPSHOT.ear" fi rules: - if: '$CI_COMMIT_BRANCH == "master" || $CI_COMMIT_BRANCH == "test"'
注意事项
- 确保GitLab Runner所在机器能通过免密SSH登录到两台目标服务器(可以在Runner上配置SSH密钥对);
rules是GitLab CI较新的语法,比旧版的only/except更灵活,推荐使用;- 如果你的部署命令有省略,直接补充完整对应的Payara部署命令即可。
内容的提问来源于stack exchange,提问作者user3723340
相关产品推荐
相关产品推荐

