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

如何阻止GitLab CI创建合并请求流水线?

如何完全阻止GitLab创建合并请求流水线?

当前CI流水线情况

我的.gitlab-ci.yml结构如下:

  • first阶段:包含job1、job2、job3
  • second阶段:包含job4
  • final阶段:包含job5

所有任务都用only/except配置,只有job3用rules:if。现在每次有合并请求时,GitLab都会创建一条只跑first阶段job3的合并请求流水线,这不是我想要的。

试过的无效配置

配置1

rules:
    - if: $SKIP_TEST != "true"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never

结果:job3直接被完全跳过,不管什么流水线都不运行。

配置2

rules:
    - if: $SKIP_TEST != "true" && $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never

结果:常规流水线里的job3被跳过,但合并请求流水线还是会创建,且依然只跑job3。

解决方案

方法1:全局禁用(最省事)

在.gitlab-ci.yml最顶部添加全局workflow配置,直接从根源阻止合并请求流水线的创建:

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never
    - when: always

这个配置优先级高于单个job的rules或only/except,能直接掐断所有合并请求流水线的生成。

方法2:逐个job配置(适合局部调整)

如果不想全局禁用,就得给每个job都添加规则,确保没有任何job会在合并请求事件中触发:

  • 对于使用only/except的job(job1、job2、job4、job5),修改为:
job1:
  stage: first
  only:
    - branches
  except:
    - merge_requests
  # 你的其他任务配置
  • 对于job3,调整规则为:
job3:
  stage: first
  rules:
    - if: $SKIP_TEST != "true" && $CI_PIPELINE_SOURCE != "merge_request_event"
  # 你的其他任务配置

不过这种方法需要逐个修改所有job,效率不如全局配置高。

重点提醒

只要有一个job满足合并请求事件的运行条件,GitLab就会创建对应流水线。所以要么用全局配置一刀切,要么确保所有job都排除合并请求事件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:34:53