优化 Jenkins 构建速度可以从架构、配置、构建过程、依赖管理、缓存等多个层面入手。下面按“投入产出比”从高到低给你一套实用方案。
一、架构与节点层面(效果最明显)
1. 使用分布式构建(Agent / Node)
- 不要把所有任务都跑在 Master 上
- 按能力拆分:
- 编译型任务 → 高 CPU 节点
- 前端/UI 测试 → 普通节点
- 部署任务 → 专用节点
- 使用 Label 精准调度
agent { label 'build-node' }
2. 并发构建
- 增加 executor 数量(但不要超过 CPU 核数太多)
- 任务拆小,支持并行
parallel {
stage('Unit Test') { ... }
stage('Build') { ... }
}
二、构建过程优化(最常见瓶颈)
3. 减少不必要的步骤
- 关闭无用的 stage(如每次都跑的全量测试)
- 非 master 分支跳过 Sonar / 打包 / 部署
- 使用
when 控制执行
when { branch 'master' }
4. 增量构建
- 编译:
- Java:开启增量编译(Maven/Gradle)
- 前端:利用 webpack / vite 缓存
- 测试:
- 只跑改动模块(如 JUnit 分组、前端 affected)
三、依赖与缓存(非常关键)
5. 使用本地/私有仓库
- Maven:Nexus / Artifactory
- npm:私有 registry
- Docker:本地镜像缓存
6. 缓存依赖目录
- Jenkins 工作区缓存
- Docker volume 缓存
- 示例(Maven):
stage('Build') {
steps {
sh 'mvn -o package'
}
}
-o 表示离线模式(需先缓存)
7. Docker 构建加速
- 使用多层缓存
- 先拷依赖再拷代码
- 使用
docker buildkit
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
四、Jenkins 配置优化
8. 禁用 SCM 轮询,使用 Webhook
- 避免定时扫描
- GitLab / GitHub / Bitbucket Webhook
9. 控制构建历史
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
10. 减少日志输出
- 大日志会严重拖慢 UI 和磁盘
- 关闭
-X 调试模式
五、工具链层面
11. 使用更快的工具
- Maven → Gradle
- npm → pnpm / yarn
- Jenkinsfile → 脚本化减少插件依赖
12. 构建产物复用
- 使用
stash / archive
- 多 stage 复用编译结果
六、典型优化前后对比(示例)
| 项目 |
优化前 |
优化后 |
| 全量构建 |
18 min |
6 min |
| 单测 |
10 min |
3 min |
| 部署 |
5 min |
1 min |
七、建议你下一步怎么做
如果你愿意,可以告诉我:
- 用的是 FreeStyle 还是 Pipeline
- 项目类型(Java / 前端 / 多模块 / Docker)
- 当前平均构建时间 & 最慢 stage
我可以直接给你针对性的 Jenkinsfile 优化示例。