You need to enable JavaScript to run this app. GitLab CI如何配置仅根目录文件变更时触发指定任务
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI如何配置仅根目录文件变更时触发指定任务

GitLab CI 仅根目录文件变更时运行任务配置方案

原配置失效的核心原因是./**/*通配符会匹配项目内所有层级的全部文件,包含根目录下的文件,因此只要合并请求存在任意文件变更,第一条when: never的规则就会命中,直接禁用任务,永远不会触发第二条匹配根目录变更的规则。

修正后的配置如下:

root_changes:
  stage: pre_build
  image: alpine:latest
  tags: ...
  variables:
    GIT_STRATEGY: none
  script: date
  rules:
    # 只要存在子目录下的文件变更,就不运行当前任务
    - if: '$CI_MERGE_REQUEST_ID'
      changes:
        - '*/*'
      when: never
    # 仅存在根目录文件变更时运行当前任务
    - if: '$CI_MERGE_REQUEST_ID'
      changes:
        - '*'
      when: always

匹配逻辑说明

  • */* 匹配所有路径中至少包含一级子目录的文件,也就是所有不在根目录的变更文件,只要命中就跳过当前任务
  • * 仅匹配根目录下的所有文件,子目录文件不会被该规则命中

效果验证

  • 仅修改根目录下的file1、file2:第一条规则无匹配,走到第二条规则命中,任务正常运行
  • 同时修改根目录文件和子目录文件:第一条规则命中子目录变更,任务直接禁用
  • 仅修改子目录文件:第一条规则命中,任务禁用,这类变更会触发原有适配子目录的流水线任务,不会影响正常的流水线校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 22:36:03