矩阵构建是什么
Jenkins 声明式流水线的 matrix 指令按多个轴的组合批量生成执行单元:每个组合相当于一个子任务,轴值自动注入为环境变量,单元格可以带自己的条件与后置处理,excludes 用来排除无意义组合。适合跨平台、跨版本、跨配置的验证矩阵,前提是先算清组合总数。
基本信息
| 结构 | matrix { axes { axis { name / values } } } |
|---|---|
| 排除 | excludes 过滤不可能或不需要的组合 |
| 单元格 | 可声明 when、agent、post 等 |
| 变量 | 轴值作为环境变量注入,命令直接引用 |
| 并行 | 组合默认并行执行,受节点容量约束 |
| 适用 | 跨平台、跨 JDK 或 Node 版本、参数组合验证 |
跨平台矩阵
跨平台矩阵
stage('cross') {
matrix {
axes {
axis { name 'PLATFORM'; values 'linux', 'windows' } // 平台维度
axis { name 'JDK'; values '17', '21' } // 运行时维度
}
excludes {
exclude { // 排除 windows + JDK21 组合
axis { name 'PLATFORM'; values 'windows' }
axis { name 'JDK'; values '21' }
}
}
stages {
stage('build') {
steps { sh 'echo $PLATFORM-$JDK' } // 轴值即环境变量
}
}
}
}典型使用场景
- 跨平台验证:同一代码在 Linux 与 Windows 上并行构建
- 多版本兼容:JDK 17 与 21 等运行时的组合回归
- 配置矩阵:数据库类型乘版本的四象限集成测试
- 发布前全组合验证:确认支持的组合都过一遍
- 缩减策略:用 excludes 去掉已知不支持组合,节省资源
- 单元格级后处理:按组合分别归档产物与日志
- 插件生态验证:按插件版本组合做兼容性检查
指令与作用
| 指令 | 作用 | 注意 |
|---|---|---|
| axes / axis | 定义维度与取值 | 组合数相乘式增长 |
| excludes | 排除组合 | 维度要精确匹配 |
| when | 单元格级条件 | 可基于轴值判断 |
| agent | 单元格级节点 | 特殊平台组合要备对应节点 |
| post | 单元格级后处理 | 失败组合单独收集日志 |
轴值即环境变量:命令参数化直接引用,无需额外转换。
轴组合数过多:构建时间与资源消耗成倍上升,先算组合总量再定维度。
给矩阵单元设置合理的超时与并发上限,避免队列被单个巨大矩阵占满。
单个单元格失败只标记对应组合:用 post 收集日志,再决定是否阻断整体发布。