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

GitLab CI:分支任意提交含指定文件变更时触发模板作业

GitLab CI/CD 实现分支历史有指定目录变更时持续触发任务

默认的rules:changes只检查当前提交的文件变更,要实现分支内只要有过指定目录的变更(无论当前提交是否修改该目录)就触发任务,有两种实用方案:

方案1:检查分支当前是否存在指定目录(最常用)

如果你的需求是「只要分支上还保留着src/one/目录,每次推送都构建app one」,用exists关键字替代changes即可。它会检查当前分支的工作区中是否存在匹配的路径,只要目录不为空就触发任务。

修改后的.gitlab-ci.yml示例:

.build_job:
  stage: build
  script:
    - echo "Build $APP"

build-one:
  extends: .build_job
  before_script:
    - APP=one
  rules:
    - exists:
      - src/one/**/* # 只要src/one下有文件就触发

build-two:
  extends: .build_job
  before_script:
    - APP=two
  rules:
    - exists:
      - src/two/**/*

这样src/one/首次推送后,后续即使没有修改该目录的推送,build-one也会持续运行。

方案2:检查分支历史是否有指定目录的变更(含已删除目录的情况)

如果需要「即使src/one/目录被删除,但分支历史中存在过该目录的变更,仍触发任务」,可以在rules:if中用git命令检查历史提交:

build-one:
  extends: .build_job
  before_script:
    - APP=one
  rules:
    - if: 'git log --format="%H" -- src/one/ | wc -l > 0'

这条命令会统计涉及src/one/路径的提交数量,只要大于0(说明历史有过变更)就触发任务。注意runner环境需要能正常执行git命令。

组合场景:当前提交变更或历史存在目录都触发

如果希望两种情况都触发任务,可以组合规则:

rules:
  - changes:
      - src/one/**/* # 当前提交修改了目录则触发
  - exists:
      - src/one/**/* # 目录存在则触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:47:42