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

如何在.gitlab-ci.yml中编写逻辑取反规则实现非sdk目录触发主流水线

针对你的需求,根据不同的触发逻辑预期,有两种可行的配置方案:

方案1:全版本兼容,严格匹配「无sdk路径变更才触发主流水线」逻辑

这个方案完全符合你描述的规则:只要提交包含sdk目录下的变更就不跑主流水线,仅当所有变更都不在sdk路径范围时才触发主流水线,兼容所有支持rules:changes语法的GitLab版本。补全后的主流水线配置如下:

run_main_pipeline:
  stage: trigger
  trigger:
    strategy: depend
    include: "$CI_PROJECT_DIR/.gitlab-ci/pipelines/main.gitlab-ci.yml"
  rules:
    # 命中sdk路径变更时,直接跳过主流水线
    - changes:
        - sdk/**/*
      when: never
    # 其余所有变更场景,触发主流水线
    - changes:
        - "**/*"

GitLab CI的rules按从上到下的优先级匹配:

  • 只要提交存在sdk/**/*路径下的文件变更,第一条规则直接命中,设置when: never跳过主流水线,此时只会触发你已经配置好的sdk流水线
  • 如果提交没有任何sdk路径下的变更,第一条规则不命中,走到第二条规则匹配全路径文件变更,触发主流水线

方案2:GitLab 13.2+ 适用,存在非sdk变更即触发主流水线

如果你需要的逻辑是「哪怕提交同时修改了sdk目录和其他目录的文件,只要有非sdk路径的变更,就同时触发sdk流水线和主流水线」,可以用GitLab 13.2版本后支持的exclude语法,配置更简洁:

run_main_pipeline:
  stage: trigger
  trigger:
    strategy: depend
    include: "$CI_PROJECT_DIR/.gitlab-ci/pipelines/main.gitlab-ci.yml"
  rules:
    - changes:
        paths:
          - "**/*"
        exclude:
          - "sdk/**/*"

注意事项

  • 路径规则中的**/*表示递归匹配所有层级目录下的任意文件,给通配符规则包裹双引号可以避免部分GitLab版本对glob语法的解析偏差,减少异常匹配问题
  • 你当前已编写完成的sdk流水线触发规则不需要做任何修改,两种主流水线配置都可以和现有逻辑正常配合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:39:16