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

如何仅当子目录(如box/)内文件变更时触发GitLab CI流水线?

解决GitLab CI子目录流水线仅在指定目录变更时触发的问题

你遇到的核心问题是:仅配置job的rules只能控制单个job是否执行,但流水线本身仍会被创建(空流水线)。要彻底阻止box目录外变更时触发流水线,需要通过workflow:rules控制整个流水线的创建逻辑。

正确配置示例

# 全局控制流水线是否触发
workflow:
  rules:
    # 合并请求场景:仅box目录有变更时创建流水线
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      changes:
        - box/**/*
    # 直接推送代码场景:仅box目录有变更时创建流水线
    - if: $CI_PIPELINE_SOURCE == "push"
      changes:
        - box/**/*
    # 其他所有场景都不创建流水线
    - when: never

build:
  stage: build
  script:
    - *build_image
  # 可选:给job添加额外规则做双重验证
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push"
      changes:
        - box/**/*

关键说明

  • changes中的路径是相对于仓库根目录的,所以box/**/*写法正确,和.gitlab-ci.yml所在的子目录无关。
  • 如果需要支持其他流水线触发源(如标签推送、定时任务),可以在workflow:rules中添加对应条件,否则这些场景会被when: never直接阻止。
  • 配置workflow:rules后,只有满足条件的情况才会创建流水线,从根源上避免了不必要的流水线触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:42:15