GitLab MR页面点击Run pipeline按钮触发MR流水线的配置问题
GitLab WIP/Draft MR手动触发流水线解决方案
问题根因
现有规则的优先级顺序导致报错:第一条when: never规则优先级最高,只要MR标题匹配WIP/Draft前缀,无论后续的流水线来源规则是否匹配,所有作业都会被直接跳过,自然触发No stages/jobs for this pipeline错误。
修复方案
调整第一条拦截规则的判断条件,增加「MR页面手动触发流水线」的例外逻辑即可,其余原有规则完全保留。修改后的配置如下:
rules: - if: ($CI_MERGE_REQUEST_TITLE =~ /^WIP/ || $CI_MERGE_REQUEST_TITLE =~ /^Draft/) && !($CI_PIPELINE_SOURCE == "web" && $CI_MERGE_REQUEST_IID) when: never - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_PIPELINE_SOURCE == "web"'
规则逻辑说明
调整后的规则完全兼容原有管控要求,仅新增手动触发例外:
- 非WIP/Draft状态的MR,仍按原有逻辑自动触发MR事件流水线、支持web触发
- WIP/Draft状态的MR仍然不会自动触发流水线,符合原先的管控预期
- 仅当用户从MR详情页的「流水线」板块点击
Run pipeline按钮时,会同时满足CI_PIPELINE_SOURCE == "web"和$CI_MERGE_REQUEST_IID变量存在两个条件,此时会跳过WIP/Draft拦截逻辑,正常启动流水线 - 项目层面的普通web触发流水线(非MR页面发起)仍会遵守WIP/Draft拦截规则,不会出现管控漏洞
内容的提问来源于stack exchange,提问作者Alexey Pavlunin
相关产品推荐
相关产品推荐

