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

