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

GitLab CI配置changes规则的任务前置阶段失败后未重跑如何解决

GitLab CI build_job未触发问题解决方案

问题根因

GitLab CI的changes规则默认将当前提交与当前分支上最近一次成功流水线对应的提交做路径对比,若指定路径无变更则不会创建对应任务。首次运行流水线时test_job执行失败,当前分支无成功流水线记录,因此首次会将当前提交与默认分支对比,识别到web-app路径变更;第二次提交仅修改了.gitlab-ci.yml文件,web-app路径无变更,因此build_job不会被创建,无法执行。

解决方案

方案1:指定changes对比基准为默认分支(推荐,GitLab 15.3及以上版本支持)

给changes新增compare_to参数,固定和默认分支做对比,不受分支上之前的流水线运行结果影响,保留仅web-app路径与默认分支有差异时才运行的逻辑:

stages:
  - test
  - build

test_job:
  stage: test
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
  script:
    - exit 0

build_job:
  stage: build
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
      changes:
        paths:
          - web-app/**/*
        compare_to: $CI_DEFAULT_BRANCH
  script:
    - echo "Building..."

方案2:补充规则匹配CI配置变更场景(兼容低版本GitLab)

如果使用的GitLab版本低于15.3不支持compare_to参数,可以在changes路径中追加.gitlab-ci.yml,修改CI配置的提交也会触发build_job:

build_job:
  stage: build
  rules:
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
      changes:
        - web-app/**/*
        - .gitlab-ci.yml
  script:
    - echo "Building..."

方案3:新增手动强制触发规则

如果需要支持临时手动运行build_job的场景,可以新增变量校验规则,手动运行流水线时设置变量CI_SKIP_CHANGES_VALIDATION=true即可跳过路径变更校验直接执行:

build_job:
  stage: build
  rules:
    - if: '$CI_SKIP_CHANGES_VALIDATION == "true"'
    - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
      changes:
        - web-app/**/*
  script:
    - echo "Building..."

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:27:00