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
相关产品推荐
相关产品推荐

