GitHub 矩阵构建是什么
一次定义多环境组合:strategy.matrix 把变量数组展开为多个并行作业,支持 include 追加组合、exclude 排除组合、fail-fast 控制失败行为。矩阵是「同一套测试跑遍支持面」的标准做法:OS、语言版本、依赖版本都能作为维度。组合数等于各维度大小的乘积,先算清规模再提交,额度与排队时间都跟它成正比。矩阵作业并行独立执行,不共享文件系统,要传递产物就用 artifact。
基本信息
| 维度 | 变量数组,如 os、node、python |
|---|---|
| include/exclude | 追加或排除组合,include 可附加属性 |
| fail-fast | 默认 true:一个失败取消其他作业 |
| 并发 | max-parallel 限制同时运行数 |
| 规模 | 组合数 = 各维度大小相乘,注意额度 |
典型使用场景
- 跨平台验证:Linux、macOS、Windows 跑同一套测试
- 版本矩阵:对支持的语言或运行时版本逐一验证
- 依赖组合:数据库、框架的兼容矩阵测试
- 附加属性:include 为特定组合注入环境变量或参数
- 成本控制:max-parallel 限制并发,折中额度与排队
- 下游聚合:用 needs 汇总各矩阵作业结果再做汇总判定
- 缓存隔离:缓存键纳入矩阵变量,避免组合间互相覆盖
矩阵与排除
矩阵与排除
jobs:
test:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
node: [20, 22]
exclude:
- os: windows-latest
node: 20
runs-on: ${{ matrix.os }}
steps:
- run: node --version关键字段
| 字段 | 作用 | 注意 |
|---|---|---|
| matrix | 定义维度数组 | 组合数按乘积增长 |
| include | 追加组合或附加属性 | 在 exclude 之后处理 |
| exclude | 剔除组合 | 先展开再排除 |
| fail-fast | 失败是否取消其他 | 跨平台验证常设为 false |
| max-parallel | 并发上限 | 控制额度与排队时间 |
include 可追加新组合或为已有组合附加属性;注意它与 exclude 的作用顺序。
取消策略看目的:快速失败省额度,全量跑完看全貌;跨平台兼容验证通常设 fail-fast: false。
artifact 与缓存命名要带矩阵变量:并发写同一个名字会互相覆盖。
include 附加属性只作用于匹配到的已有组合;匹配不上时才会作为新组合追加。