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

GitLab CI规则异常:未修改源码却触发任务,求排查原因

GitLab CI规则问题分析与修复

问题根源

你遇到的触发异常和规则顺序直接相关,GitLab CI的规则是从上到下依次匹配,一旦匹配到符合条件的规则就停止后续检查。你的第三条when: never规则放在最后,导致分支有打开的MR时,分支流水线会先匹配前两条规则,跳过了阻止逻辑。

为什么非src目录提交会触发任务?

当分支存在打开的MR时,你提交代码会同时触发MR流水线和分支流水线:

  • MR流水线会匹配第一条规则,但你这次没改src,所以不会触发任务;
  • 分支流水线会先匹配第二条规则(CI_COMMIT_BRANCH存在),如果此时changes检查出现误判(比如分支是首次提交,GitLab会将当前提交与默认分支对比,若默认分支有src目录,会被误判为src有变更;或者流水线缓存的对比记录异常),就会触发任务,而第三条阻止规则根本没机会被执行。

规则调整方案

必须将第三条规则移到最前面,优先阻止有MR的分支流水线运行任务。调整后的规则如下:

rules:
  - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
    when: never
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    changes:
      - src/**/*
  - if: $CI_COMMIT_BRANCH
    changes:
      - src/**/*

调整后的逻辑

  1. 优先阻止重复流水线:如果是分支流水线且有打开的MR,直接跳过任务,避免分支和MR流水线重复运行;
  2. MR流水线触发条件:仅当MR事件且src目录有变更时,运行任务;
  3. 无MR分支的触发条件:仅当分支无打开的MR且src目录有变更时,运行任务。

额外优化建议

如果仍出现changes误判,可明确指定对比当前提交的上一次提交,避免与默认分支对比:

changes:
  - src/**/*
  compare_to: $CI_COMMIT_BEFORE_SHA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:33:27