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

如何通过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

配置逻辑说明

  1. 任务脚本:直接输出错误提示并执行exit 1触发任务失败,以此阻止不符合要求的MR合并(需确保该任务在项目的合并检查中被设为必填项)。
  2. 规则优先级:GitLab CI会按顺序匹配rules中的条件:
    • 第一条规则:当流水线来源是合并请求事件,且changelogs/unreleased/**/*路径下有文件变更时,标记该任务never(永远不执行)。
    • 第二条规则:当流水线来源是合并请求事件时,标记该任务always(强制执行)——这条规则只会在第一条规则不匹配时触发,也就是MR中没有添加符合要求的changelog文件的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:27:21