You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:10:29