GitLab 15.7.0 CI工作流规则失效:非master分支触发流水线
GitLab CI 流水线触发规则问题解决
我在GitLab 15.7.0版本中配置CI,希望仅当master分支有代码提交时才触发流水线,但实际所有分支推送提交都会触发流水线。我的.gitlab-ci.yml配置如下:
default: image: python:3 cache: paths: - ".cache/pip" workflow: rules: - if: $CI_COMMIT_BRANCH == "master" # 也尝试过用$CI_DEFAULT_BRANCH when: always stages: - prerequisites - pytest variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" prerequisites: stage: prerequisites needs: [] script: - python --version - pip install pytest pytest: stage: pytest needs: ["prerequisites"] script: - python -m pytest -v tests/
根据官方文档说明,我以为不需要添加- when: never来覆盖其他情况,但问题依然存在。官方文档原文翻译:
流水线在其他任何情况下都不会运行。
问题解决
GitLab 15.x版本中,workflow:rules的实际行为和文档描述存在细节差异——仅设置单个匹配master的规则并不能自动阻止其他分支触发流水线,必须明确添加兜底的when: never规则。
修改后的workflow配置如下:
workflow: rules: - if: $CI_COMMIT_BRANCH == "master" when: always - when: never
如果你的项目默认分支不是master,想适配$CI_DEFAULT_BRANCH变量,也可以这样写:
workflow: rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: always - when: never
这样配置后,只有master(或项目默认分支)的提交才会触发流水线,其他分支的推送都不会触发。
内容的提问来源于stack exchange,提问作者Mordecai
相关产品推荐
相关产品推荐

