矩阵展开是什么
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 是常见的兼容测试形态。
变量名大小写敏感:矩阵定义的是大写变量名,脚本按同一拼写取值,拼错会取到空值。
删减维度就是维护矩阵形态:支持政策变化时调整取值列表,一次提交完成扩缩。
维护建议
- 发布前压缩:临时只跑核心组合验证主链路,正式合并时恢复完整矩阵
- 取值列表与支持政策同步:弃用版本从列表移除,矩阵即文档