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

GitLab如何基于子文件夹动态并行执行任务,无需手动更新矩阵?

解决方案:动态生成GitLab CI并行任务矩阵

针对子文件夹数量多且持续增长的场景,GitLab 15.10及以上版本支持动态生成并行矩阵,无需手动维护TEAM数组,自动识别变更的子文件夹并触发对应任务。

实现步骤

  1. 定义前置任务,动态生成包含所有变更子文件夹的矩阵JSON
  2. 在主任务中引用该矩阵,自动生成并行任务

完整CI配置示例

# 第一步:动态生成矩阵JSON
Generate Team Matrix:
  stage: .pre
  script:
    - |
      # 筛选当前提交中变更的config.yaml所属子文件夹
      TEAMS=$(git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA | grep 'mainfolder/.*/config.yaml' | sed -E 's/mainfolder\/(.*)\/config.yaml/\1/' | sort | uniq)
      # 转换为GitLab CI矩阵所需的JSON格式
      echo "matrix=[\"$TEAMS\"]" | sed 's/ /", "/g' > matrix.env
  artifacts:
    reports:
      dotenv: matrix.env

# 第二步:使用动态矩阵运行并行任务
Validating the Data:
  stage: validation
  parallel:
    matrix:
      - TEAM: $matrix
  rules:
    - changes:
        - mainfolder/$TEAM/config.yaml

关键说明

  • stage: .pre 是GitLab预定义的前置阶段,会在所有自定义阶段前执行
  • 若需要对所有子文件夹(无论是否变更)运行任务,可修改TEAMS的获取命令:
    TEAMS=$(find mainfolder -maxdepth 1 -type d ! -name mainfolder | sed 's/mainfolder\///')
    
  • 生成的matrix.env会作为环境变量传递给后续任务,$matrix会被解析为数组,自动生成对应数量的并行任务

注意事项

  • 确保GitLab Runner版本与服务器版本兼容(建议15.10+)
  • 子文件夹数量上千时,需在项目设置中调整最大并行任务数,避免触发限制
  • 若使用低于15.10的GitLab版本,可通过子流水线实现:编写脚本生成子流水线CI配置文件,再用trigger关键字触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:27:38