Gitlab CI MR流水线规则异常:主分支合入develop时任务仍执行
GitLab CI作业规则失效:无法禁止main→develop的MR执行作业
问题根源
你作业规则的第一条之所以不生效,核心是使用了错误的预定义变量:
GitLab CI中,用于标识合并请求(MR)源分支和目标分支的正确预定义变量是CI_MERGE_REQUEST_SOURCE_BRANCH_NAME和CI_MERGE_REQUEST_TARGET_BRANCH_NAME,而你代码中写的CI_MERGE_REQUEST_SOURCE_BRANCH、CI_MERGE_REQUEST_TARGET_BRANCH是不存在的变量。这导致第一条when: never的规则永远不会被触发,后续规则只要满足条件就会执行作业。
修复方案
修改作业规则的第一条,替换为正确的变量名称即可,完整的作业规则配置如下:
rules: # 精准匹配从main分支向develop分支发起的MR,直接禁止作业执行 - if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "main" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" when: never - if: $CI_MERGE_REQUEST_TARGET_BRANCH_PROTECTED == "true" - if: $CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_BRANCH !~ /^hotfix\.*/ - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "develop" changes: - Admin.Service/**/*
额外注意事项
- 规则顺序至关重要:
when: never的规则必须放在所有允许作业执行的规则之前,否则后续规则会先匹配生效。你当前的顺序是正确的,无需调整。 - Workflow配置无需修改:你的workflow规则允许针对develop分支的MR创建流水线,这与作业级别的禁止规则不冲突——我们只是阻止特定MR触发该作业,而非禁止整个流水线运行。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

