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

如何配置GitLab流水线:特定分支合并到main时触发部署任务

解决GitLab CI仅在特定交付分支合并到main时触发prod测试服务器部署的问题

正确的规则配置

要实现仅当meta-delivery-x.x或meta-delivery-x.x.x格式的分支合并到main时触发prod测试服务器部署,可使用以下GitLab CI规则:

rules:
  # 针对合并请求事件:源分支匹配交付格式,目标分支为main时触发
  - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^meta-delivery-\d+\.\d+(\.\d+)?$/'
    when: on_success
  # 针对合并后main分支的push流水线:通过提交信息判断是否来自符合要求的交付分支
  - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main" && $CI_COMMIT_MESSAGE =~ /Merge branch .*meta-delivery-\d+\.\d+(\.\d+)? into main/'
    when: on_success

规则说明

  1. 合并请求事件规则:
    • 使用CI_MERGE_REQUEST_SOURCE_BRANCH_NAME匹配合并请求的源分支(即你的交付分支),而非CI_COMMIT_REF_NAME(后者在合并请求流水线中是临时分支,无法匹配交付分支)。
    • 正则/^meta-delivery-\d+\.\d+(\.\d+)?$/同时兼容x.x和x.x.x两种版本格式。
  2. main分支push流水线规则:
    部分场景下,合并请求完成后会在main分支触发push流水线,通过匹配提交信息中的合并记录,确保仅当合并的是符合格式的交付分支时触发部署。

你之前规则的问题

  • 错误使用CI_COMMIT_REF_NAME匹配交付分支:在合并请求流水线中,该变量指向的是合并请求的临时分支;在合并后的main分支流水线中,该变量指向main,均无法匹配交付分支。
  • CI_MERGE_REQUEST_STATE == "merged"的判断逻辑无效:合并请求进入merged状态后,合并请求事件的流水线已结束,此时触发的是main分支的push流水线,该变量不再生效。

你的dev服务器规则优化建议

你当前的dev部署规则:

- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_REF_NAME == "main"'

可优化为:

- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'

原因是CI_COMMIT_REF_NAME在合并请求事件中并非main分支,使用CI_MERGE_REQUEST_TARGET_BRANCH_NAME能准确判断目标分支为main的合并请求事件。

内容的提问来源于stack exchange,提问作者Jack McGowan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:30:16