You need to enable JavaScript to run this app. 为什么创建合并请求时我的GitLab流水线test阶段被跳过?
优惠活动
大模型
产品
解决方案
定价
更多

为什么创建合并请求时我的GitLab流水线test阶段被跳过?

问题根因

GitLab CI 作业的rules采用从上到下的顺序匹配逻辑:作业命中某条规则时就按照该规则的when配置决定是否执行,如果没有命中任何规则,作业默认被设置为不执行。

你当前test作业的rules仅配置了「web 触发、定时触发时不执行」这一条规则,合并请求触发的merge-request-event场景没有命中任何规则,因此test作业被默认跳过,不会运行。

修复方案

根据你的需求可以选择以下任意一种方案:

方案1:兜底执行所有未排除的场景

如果你的需求是test作业在除了web触发、定时触发之外的所有场景(包括合并请求、代码推送等)都正常执行,直接在规则末尾加一条兜底规则即可:

test:
  rules:
    - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule"
      when: never
    # 兜底规则:所有未匹配到上面排除规则的场景,都正常执行作业
    - when: on_success
  stage: test
  script:
    - 'echo "Running Test"'

when: on_success表示当前面的所有阶段执行成功后就运行当前作业,符合流水线按顺序执行的要求。

方案2:明确指定需要执行的场景

如果需要更严格的控制,避免作业在意外场景触发,可以明确列出允许执行的场景:

test:
  rules:
    - if: $CI_PIPELINE_SOURCE == "web" || $CI_PIPELINE_SOURCE == "schedule"
      when: never
    # 明确指定合并请求场景执行
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    # 明确指定代码推送场景执行
    - if: $CI_PIPELINE_SOURCE == "push"
  stage: test
  script:
    - 'echo "Running Test"'

规则中未写when时默认取值为on_success,和方案1的执行逻辑一致。

修改后合并请求触发的流水线就会按照test→stage1→stage2的顺序正常执行三个阶段。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 13:24:04