首页/开发/CI/CD 与发布速查/GitLab CI parallel:matrix 矩阵
工具链要点63 条

GitLab CI parallel:matrix 矩阵

一次定义多组作业:维度变量的组合自动展开,适合跨版本、跨数据库的兼容性测试。

CI/CD 与发布速查开发更新于 2026-10-13

矩阵展开是什么

GitLab CI 的 parallel:matrix 把一个作业定义成多组变量组合:维度列出取值,作业数按组合自动展开,每个作业收到自己那份维度变量。适合跨版本、跨数据库、跨平台的兼容性测试——不必手写多份近似重复的作业。展开数量等于各维度取值数相乘,与 Runner 并发额度直接相关,上线矩阵前先算总数。

基本信息

写法parallel:matrix 列表,一项即一个维度组合
变量每个组合把维度值注入为环境变量
展开作业数 = 各维度取值数相乘
资源大量组合消耗并发额度与排队时间
命名展开后的作业名附带组合标识,便于区分

典型使用场景

  • 跨语言版本兼容:如 Ruby 3.1/3.2 各跑一轮测试
  • 跨数据库验证:postgres、mysql 各跑一套用例
  • 跨平台构建:Linux 与 macOS 构建同一产物
  • 与 needs 组合:小矩阵 + DAG 并行,缩短反馈时间
  • 缩减策略:核心维度全展开,边缘组合抽样覆盖
  • 版本支持矩阵:弃用版本从矩阵里删掉,而不是留在注释里

双维度矩阵

双维度矩阵
test:
  parallel:
    matrix:
      - RUBY: ["3.1", "3.2"]        # 维度一:语言版本
        DB: [postgres, mysql]        # 维度二:数据库
  script:
    - run-tests --ruby=$RUBY --db=$DB
# 展开为 4 个作业,每个作业拿一组 $RUBY 与 $DB

展开前后对照

要素展开前展开后
作业数量手写多份互异作业按组合数自动生成
变量取值每个作业手工写死维度变量统一注入
维护成本改一处要改多份改矩阵定义一处生效
资源占用取决于手写数量组合数乘每个组合的并发占用
先算总数:2×2 是 4 个作业,再加一个维度就翻倍,评估 Runner 容量后再上线。
矩阵与 needs、rules 可组合:小矩阵 + DAG 是常见的兼容测试形态。
变量名大小写敏感:矩阵定义的是大写变量名,脚本按同一拼写取值,拼错会取到空值。
删减维度就是维护矩阵形态:支持政策变化时调整取值列表,一次提交完成扩缩。

维护建议

  • 发布前压缩:临时只跑核心组合验证主链路,正式合并时恢复完整矩阵
  • 取值列表与支持政策同步:弃用版本从列表移除,矩阵即文档

易错点

  • 组合数失控:多维度相乘拉长排队时间,先评估 Runner 容量
  • 变量名大小写不一致:脚本取值为空却难以察觉
  • 构建逻辑塞进矩阵:前面阶段的重复构建被放大,把构建提为前置作业、测试阶段再展开矩阵
  • 缓存键不含维度:不同组合共用同一缓存互相覆盖,缓存键要带上维度变量

数据来源与参考

  • GitLab Docs《Parallel execution》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌