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

GitLab CI配置:MR流水线运行全任务且避免分支与MR流水线重复执行

GitLab CI 流水线配置方案

先明确术语:

  • branch pipeline:推送代码到分支时触发的流水线。
  • MR pipeline:创建合并请求或推送代码至合并请求关联分支时触发的流水线。

直接上可行的.gitlab-ci.yml配置,完美匹配你的需求:

workflow:
  rules:
    # 有合并请求时,只触发MR流水线
    - if: $CI_MERGE_REQUEST_IID
    # 没合并请求时,触发分支流水线(可根据需求调整分支范围)
    - if: $CI_COMMIT_BRANCH && !$CI_MERGE_REQUEST_IID

job_A:
  script:
    - echo "Job A 在所有流水线里运行"
    # 无需添加任何rules,默认会在所有符合workflow规则的流水线中执行

job_B:
  script:
    - echo "Job B 仅在MR流水线运行"
  rules:
    - if: $CI_MERGE_REQUEST_IID

配置说明

  1. workflow规则是核心:
    • 第一条规则通过$CI_MERGE_REQUEST_IID判断是否存在打开的合并请求,存在则仅触发MR流水线,直接跳过分支流水线的触发逻辑,解决了之前同时触发两种流水线的问题。
    • 第二条规则仅当存在分支且无合并请求时,才触发分支流水线,保证无MR场景下的正常分支流水线执行。
  2. job_A无需额外规则:
    GitLab CI 默认会让未配置rules的job在所有符合workflow触发条件的流水线中运行,不管是MR流水线还是分支流水线,job_A都会自动执行,完全不用添加merge_request_event规则。
  3. job_B精准限制:
    通过rules判断$CI_MERGE_REQUEST_IID,确保只有MR流水线才会执行job_B。

效果验证

  • 打开MR后推送代码:仅触发MR流水线,job_A和job_B均运行。
  • 直接推代码到无MR的分支:仅触发分支流水线,仅job_A运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:39:17