parallel 是什么
并行执行多个阶段:把互不依赖的测试与检查同时跑,缩短流水线整体时长;failFast 控制某个分支失败时是否取消其他分支。串行与并行是取舍:并行缩短墙钟时间,但会让失败定位更复杂、资源峰值更高;先并行最独立、最长的那部分。并行分支各自占用一个执行器,容量不足时排队等待反而更慢,并行度要与执行器数量匹配。
基本信息
| 写法 | parallel { stage ... } |
|---|---|
| failFast | true 时一个分支失败立即取消其余分支 |
| 失败处理 | 默认其余分支继续跑完,failFast 改变默认 |
| 资源 | 每个并行分支占用一个执行器 |
| 工作区 | 默认共享,同目录写入会互相覆盖 |
| 对比 | 与 matrix 的维度展开语义不同 |
典型使用场景
- 测试分片:单元与集成测试互不依赖,同时跑缩短反馈
- 多平台验证:Linux 与 Windows 检查同时进行
- 静态检查与测试并行:lint、扫描与测试同时启动
- 快速失败:冒烟分支失败时 failFast 立即终止其余分支
- 资源分级:慢而独立的集成测试组并行,快的静态检查串行前置
- 发布前置:构建与安全扫描并行,两者都过才进入部署
- 跨架构构建:amd64 与 arm64 镜像构建并行
并行测试
并行测试
stage('tests') {
failFast true // 任一分支失败即取消其余
parallel {
stage('unit') { steps { sh 'make unit' } }
stage('integration') { steps { sh 'make integration' } }
stage('lint') { steps { sh 'make lint' } }
}
}与 matrix 的区别
| 维度 | parallel | matrix |
|---|---|---|
| 定义方式 | 手工列举 stage | 按轴自动组合 |
| 分支数量 | 固定几个 | 轴值的笛卡尔积 |
| 适用场景 | 已知的几类任务 | 平台与版本组合较多的场景 |
并行分支日志交错:各自写独立日志文件更利于定位失败。
parallel 里每个分支是完整阶段:可在分支内独立声明 agent 与 when 条件。
执行器数量少于分支数量时会出现明显排队:看排队区长度再调整并行度。