Gitlab合并代码后master分支流水线不运行问题求助
问题原因
你的.gitlab-ci.yml中workflow规则的逻辑存在两处问题,导致合并到默认分支后流水线无法触发:
- 排除合并请求流水线的规则放在了规则列表末尾,GitLab会先评估前面的变量设置规则再执行排除逻辑,虽然这不是本次问题的核心,但会导致不必要的规则匹配开销。
- 前三个仅设置环境变量的规则没有显式声明
when: always,部分版本的GitLab在匹配到仅包含variables的规则时,只会应用变量配置,不会默认判定为允许创建流水线,会继续向下匹配剩余规则。当所有规则评估完成后没有明确的允许运行规则时,GitLab会默认不创建流水线。
修复方案
调整workflow规则顺序,将排除合并请求的规则放在最前,同时给所有变量设置规则添加when: always明确允许流水线运行,修改后的配置如下:
stages: - build workflow: rules: # 优先排除合并请求流水线,避免重复触发 - if: $CI_MERGE_REQUEST_ID when: never - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH variables: ENVIRONMENT_TYPE: 'prod' when: always - if: $CI_COMMIT_REF_PROTECTED == 'true' && $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH variables: ENVIRONMENT_TYPE: 'preprod' when: always - if: $CI_COMMIT_REF_PROTECTED == 'false' variables: ENVIRONMENT_TYPE: 'review' when: always Compile: stage: build image: node only: - branches script: - yarn install - yarn build
调整后规则的匹配逻辑为:
- 所有合并请求流水线优先命中第一条规则,直接禁止运行,解决重复触发问题
- 后续分支推送会依次匹配环境规则,命中后直接设置对应环境变量并允许流水线运行,不会继续匹配后续规则
- 覆盖所有分支场景,包括默认分支、受保护非默认分支、普通非保护分支
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

