如何实现仅在创建Merge Request时带有bug标签才触发GitLab CI流水线,后续添加标签不触发?
当然可以实现这个需求!
你的核心诉求是只有在创建MR时就带有bug标签的情况下才触发对应的流水线脚本,后续添加标签不会触发,我们可以借助GitLab CI的特殊变量和workflow规则精准实现这一点。
先说说你当前配置的小问题:现在的规则只判断了是否是MR,但没区分MR是创建还是后续更新的场景。GitLab提供了CI_MERGE_REQUEST_EVENT_TYPE变量——当MR刚被创建时,这个变量值为merge_request_created;如果是后续编辑MR(比如添加标签),变量值会变成merge_request_updated。我们可以利用这个变量来锁定触发条件。
调整后的.gitlab-ci.yml配置如下:
stages: - build workflow: rules: # 仅在MR创建事件 + 带有bug标签时,允许流水线启动 - if: '$CI_MERGE_REQUEST_IID && $CI_MERGE_REQUEST_EVENT_TYPE == "merge_request_created" && $CI_MERGE_REQUEST_LABELS =~ /bug/' when: always # 其他所有场景都不触发流水线 - when: never build: stage: build script: - echo $CI_MERGE_REQUEST_LABELS - echo "The bug label is defined."
配置说明:
workflow层的规则直接从根源拦截了不符合条件的情况:只有当MR是刚创建的状态,并且携带bug标签时,才会生成并运行流水线。- 后续给MR添加
bug标签时,触发的是merge_request_updated事件,不符合workflow的规则,所以不会触发流水线脚本。 - 去掉了job层的
rules,因为workflow已经完成了条件过滤,job只需要正常执行脚本即可。
这样配置后,完全匹配你想要的逻辑~
内容的提问来源于stack exchange,提问作者user3906723
相关产品推荐
相关产品推荐

