GitLab CI合并请求配置deploy review致前置任务失效求助
GitLab CI合并请求流水线执行顺序问题解决
问题原因
在GitLab CI的合并请求流水线中,只有配置了rules规则明确允许运行的job,或者通过全局workflow规则包含的job才会被执行。你当前的build和test阶段job没有设置任何rules,因此在合并请求流水线中会被默认跳过,仅执行配置了merge_request_event规则的deploy review job。
解决方案
方法一:给前置阶段job添加规则
直接给build和test阶段的所有job添加规则,让它们在合并请求流水线和分支流水线中都能运行:
修改build static website、test artifacts、test website三个job的配置:
build static website: stage: build rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' # 合并请求时运行 - if: $CI_COMMIT_BRANCH # 分支流水线时运行 script: - echo $CI_COMMIT_SHA - npm install - npm i -g gatsby-cli - gatsby build - sed -i "s/%%VERSION%%/$CI_COMMIT_SHA/g" public/index.html artifacts: paths: - "public" test artifacts: image: alpine stage: test rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_BRANCH script: - grep -q "Gatsby" public/index.html test website: stage: test rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_BRANCH script: - apk --no-cache add curl - npm i - npm i -g gatsby-cli - gatsby serve & - sleep 10 - curl "http://localhost:9000" | tac | tac | grep -q "Gatsby"
方法二:使用全局workflow统一控制流水线触发
在配置文件顶部添加workflow规则,统一控制流水线的触发条件,这样所有未单独设置rules的job都会在符合条件的流水线中自动运行:
image: node:lts-alpine # 添加全局workflow规则 workflow: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' # 触发合并请求流水线 - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS == null # 无打开的合并请求时,触发分支流水线 stages: - build - test - deploy review - deploy staging - deploy production - production tests # ... 其余配置保持不变
这种方式不需要修改每个前置job的规则,通过全局配置确保合并请求流水线包含所有必要的前置阶段,同时保留deploy review的规则,确保它仅在合并请求时运行。
验证效果
应用任意一种方案后,合并请求流水线会按照预期顺序执行:build -> test -> deploy review。
内容的提问来源于stack exchange,提问作者Tri
相关产品推荐
相关产品推荐

