You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:06:44