如何优化Gitlab CI配置避免Sprint-Release-Branch合并生成手动任务
GitLab CI 配置优化方案
根因分析
- 原配置的MR场景分支判断错误:merge request 事件中
$CI_COMMIT_BRANCH指向源分支而非目标合并分支,原规则无法拦截目标为Sprint-Release-Branch的MR流水线 - 原流水线源判断逻辑错误:
&&为逻辑与,一个流水线不可能同时属于merge_request_event和push两种触发源,该规则永远不生效 - 无规则限制的手动任务会默认加入所有创建成功的流水线,导致多余任务生成
优化后完整配置
workflow: rules: # 拦截向Sprint-Release-Branch push触发的流水线 - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "Sprint-Release-Branch"' when: never # 拦截目标分支为Sprint-Release-Branch的MR触发的流水线 - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "Sprint-Release-Branch"' when: never - when: always stages: - Stage1 - Stage2 - Stage3 Task1: stage: Stage1 script: - echo "Stage1" rules: - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/' tags: - Runner Task2: stage: Stage1 script: - echo 'Checking code standard as per "Coding Standards"' rules: - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/' allow_failure: true tags: - Runner Task3: stage: Stage2 script: - echo "Stage2" when: manual tags: - Runner Task4: stage: Stage3 script: - echo "Stage3" when: manual tags: - Runner
规则说明
- workflow级别的规则会优先判断是否需要创建整个流水线,命中拦截规则后直接不会生成流水线,自然不会出现多余的手动任务
- 分别针对push和MR两类场景做精确判断,不会影响其他分支、其他触发源的流水线正常运行
- 额外修正了Task2脚本中双引号嵌套的语法问题,避免执行报错
内容的提问来源于stack exchange,提问作者Sushil.R
相关产品推荐
相关产品推荐

