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

GitLab CI新分支首次提交如何按路径变更触发指定Job

GitLab流水线新分支首次提交触发所有Job的解决方案

问题原因

新分支首次提交时,GitLab的changes规则默认没有可对比的基准提交(CI_COMMIT_BEFORE_SHA为全0的SHA值),会将仓库内所有文件判定为变更,因此触发所有匹配${TF_PATH}的Job。后续提交则以上一次提交为基准,规则正常生效。

解决方案

通过区分首次提交和非首次提交两种场景,分别配置changes规则的对比基准:

  • 首次提交时,指定对比仓库默认分支,仅当${TF_PATH}下的文件相对于默认分支有变更时触发Job;
  • 非首次提交时,沿用默认的上一次提交作为对比基准,仅触发变更路径对应的Job。

修改后的完整配置

.preview-tf-plan:
  extends:
    - .terraform-plan
  environment:
    name: preview
    url: https://app.com
  rules:
    # 排除main分支,不触发Job
    - if: $CI_COMMIT_BRANCH == "main"
      when: never
    # 处理新分支首次提交:对比默认分支,检查TF_PATH下的文件变更
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      changes:
        paths:
          - ${TF_PATH}/*
      compare_to: $CI_DEFAULT_BRANCH
    # 处理分支后续提交:对比上一次提交,检查TF_PATH下的文件变更
    - if: $CI_COMMIT_BRANCH
      changes:
        paths:
          - ${TF_PATH}/*

preview-tf-plan-apps-folder1:
  extends:
    - .preview-tf-plan
  variables:
    TF_PATH: terraform/apps-folder1

preview-tf-plan-apps-folder2:
  extends:
    - .preview-tf-plan
  variables:
    TF_PATH: terraform/apps-folder2

preview-tf-plan-apps-folder3:
  extends:
    - .preview-tf-plan
  variables:
    TF_PATH: terraform/apps-folder3

preview-tf-plan-apps-inf:
  extends:
    - .preview-tf-plan
  variables:
    TF_PATH: terraform/apps-folder4

关键说明

  • 使用$CI_DEFAULT_BRANCH代替硬编码的分支名,适配不同仓库的默认分支设置;
  • 通过全0SHA值精准判断首次提交场景;
  • 分场景配置规则,确保首次提交和后续提交都能仅触发变更路径对应的Job。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:02:49