最有效方式是用parallel横向拆分无依赖模块,配合timeout防护与agent精准匹配,可将构建耗时缩短三分之二;需满足无编译依赖、环境隔离、产物不冲突三条件,并按环境/语言/架构维度组织并行分支。
直接用 parallel 把原本串行的构建任务拆开跑,是缩短 Jenkins 构建耗时最有效的方式。关键不是“能不能并”,而是“哪些能并、怎么分、如何稳”。只要模块间无强依赖、资源够用、环境隔离,整体耗时压缩三分之二很常见——比如原来 30 分钟的流程,优化后压到 10 分钟内。
不是所有任务都适合放进 parallel 块。必须同时满足以下三点:
repo/api:1.2.0 和 repo/ui:1.2.0),不覆盖、不等待。若某服务需调用另一服务 API 才能启动集成测试,则它应放在并行块之后、串行的「联调验证」阶段中执行。
避免为每个服务重复写一遍全量流程,改用构型维度组织并行任务:
docker buildx build --platform linux/amd64,linux/arm64 一次生成双架构镜像,省去两次完整构建循环。单个服务内部也可再并行,比如它的单元测试和静态扫描(SonarQube、SpotBugs)完全不耦合,就该一起跑。但必须加 timeout 控制风险:
timeout(time: 15, unit: 'MINUTES'),防某个服务因网络抖动或依赖卡死拖垮整条流水线;并行不等于盲目开多线程,必须让任务落到合适的执行节点上:
node:16-alpine 类 agent,Java 构建分配给 maven:3.8-jdk17 类 agent;