如何通过GitLab CI DSL实现MR无变更日志时任务失败?
解决方案
你可以通过GitLab CI的rules配置结合when: never和when: always实现反向逻辑,完全不需要依赖git CLI命令,纯YAML配置即可满足需求:
Enforce Changelog for Merge Request: script: - echo "错误:未在changelogs/unreleased/目录下添加变更日志文件" - exit 1 rules: # 当MR中存在符合路径的changelog变更时,跳过此任务 - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: - changelogs/unreleased/**/* when: never # 其他MR场景(即无changelog变更时),强制执行此任务 - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always
配置逻辑说明
- 任务脚本:直接输出错误提示并执行
exit 1触发任务失败,以此阻止不符合要求的MR合并(需确保该任务在项目的合并检查中被设为必填项)。 - 规则优先级:GitLab CI会按顺序匹配
rules中的条件:- 第一条规则:当流水线来源是合并请求事件,且
changelogs/unreleased/**/*路径下有文件变更时,标记该任务never(永远不执行)。 - 第二条规则:当流水线来源是合并请求事件时,标记该任务
always(强制执行)——这条规则只会在第一条规则不匹配时触发,也就是MR中没有添加符合要求的changelog文件的场景。
- 第一条规则:当流水线来源是合并请求事件,且
内容的提问来源于stack exchange,提问作者StFS
相关产品推荐
相关产品推荐

