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

如何避免合并MR时GitLab CI的job1重复执行?

解决GitLab CI合并MR时job1重复运行的问题

你的问题出在合并MR时生成的合并提交,其提交信息大概率包含了JOB1(比如默认会带上MR标题),触发了原规则里的CI_COMMIT_MESSAGE匹配条件,导致job1重复执行。

只需调整rules规则,精准限定运行场景并排除合并提交的情况,修改后的配置如下:

job1:
  extends: .parentJob
  rules:
    # 场景3:定时流水线(已设置CI_COMMIT_MESSAGE为JOB1)
    - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_MESSAGE =~ /.*JOB1.*/'
    # 场景2:创建/更新标题含JOB1的MR(仅在MR专属流水线中触发)
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /.*JOB1.*/'
    # 场景1:推送含JOB1的分支提交,排除合并提交
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_MESSAGE =~ /.*JOB1.*/ && $CI_COMMIT_IS_MERGE_COMMIT != "true"'

规则说明:

  1. 定时流水线:通过CI_PIPELINE_SOURCE == "schedule"明确限定定时触发的场景,避免和其他push场景混淆。
  2. MR场景:用CI_PIPELINE_SOURCE == "merge_request_event"限定仅在MR的创建/更新流水线中触发,不会影响合并后的分支推送流水线。
  3. 分支推送场景:新增CI_COMMIT_IS_MERGE_COMMIT != "true"条件,直接排除GitLab自动生成的合并提交(该变量在GitLab 13.5及以上版本可用),确保只有普通提交才会触发job1。

如果你的GitLab版本低于13.5,无法使用CI_COMMIT_IS_MERGE_COMMIT,可以改用正则排除合并提交的消息格式:

# 替换分支推送场景的规则
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_MESSAGE =~ /.*JOB1.*/ && $CI_COMMIT_MESSAGE !~ /^Merge (branch|!.*) into .*$/'

这个正则会过滤掉类似Merge branch 'feature' into main或Merge !123 into main的合并提交消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:56:09