如何编写GitLab CI作业规则:仅更新CHANGELOG.md时不触发作业
GitLab CI作业规则实现方案
可以通过GitLab CI的rules结合文件变更判断实现需求,核心逻辑是仅当默认分支提交中仅包含CHANGELOG.md时跳过作业,其余情况正常执行。
具体配置示例
# 替换为你的作业名称 your_target_job: script: - # 填写你的作业执行脚本 rules: # 规则1:默认分支提交仅修改CHANGELOG.md时,跳过作业 - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' changes: - CHANGELOG.md if: '$(git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA | wc -l) -eq 1' when: never # 规则2:默认分支下其他所有情况,执行作业 - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' when: always
规则逻辑说明
- 第一条规则:
- 先通过
changes: - CHANGELOG.md筛选出所有修改过CHANGELOG.md的提交 - 再通过
git diff统计本次提交的变更文件数量,当数量为1时(即仅修改了CHANGELOG.md),触发when: never跳过作业
- 先通过
- 第二条规则:
- 覆盖默认分支下其余所有场景:包括同时修改
CHANGELOG.md和其他文件、未修改CHANGELOG.md但修改了其他文件的情况,均会正常执行作业
- 覆盖默认分支下其余所有场景:包括同时修改
适配backmerge场景说明
对于semantic-release的backmerge插件生成的回退合并提交:
- 若合并提交仅更新
CHANGELOG.md,会触发第一条规则跳过流水线 - 若合并提交包含其他文件变更,则触发第二条规则正常运行流水线,完全匹配需求
内容的提问来源于stack exchange,提问作者J W
相关产品推荐
相关产品推荐

