如何阻止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
相关产品推荐
相关产品推荐

