Ubuntu 上 Jenkins 磁盘使用优化实操指南
一 定位大目录与主要占用
- 查看整体占用:
sudo du -sh /var/lib/jenkins;逐层下钻定位大目录:sudo du -sh /var/lib/jenkins/* | sort -h。Jenkins 常见的大目录包括:jobs(每个任务的配置与构建记录)、workspace(检出代码与构建中间产物)、以及使用 Docker 时宿主机上的 overlay2(镜像层)。优先从这些路径入手清理与迁移。
二 配置构建保留策略
- 在“系统管理 → 系统配置 → 全局构建丢弃策略”设置全局默认,再在每个 Job → Configure → General 勾选“丢弃旧的构建”,建议策略:
- 保留最近 10 个构建或 30 天内构建(二选一满足即清理)。
- 单独设置制品保留:如“Days to keep artifacts / Max # of artifacts to keep”,避免制品长期堆积。
- 作用范围:仅对“构建产物与日志”有效,不会删除工作区未纳入制品的文件,需配合工作区清理策略使用。
三 清理工作区与归档制品
- 使用 Workspace Cleanup 插件,在构建前后按“Include/Exclude 模式”删除未纳入制品的文件(如 node_modules、target、build、dist、.gradle/.m2 等),避免工作区无限增长。
- 在 Job 配置中启用“在构建后清理工作区”(Delete workspace before build starts / after build ends),确保每次构建在干净环境中运行,减少残留。
- 定期清理已归档但不再需要的制品(结合第二点的“制品保留策略”),避免
${JENKINS_HOME}/jobs/<JOB>/builds/ 与制品目录长期膨胀。
四 迁移大目录到独立磁盘并优化存储布局
- 迁移 JENKINS_HOME:将
${JENKINS_HOME} 指向更大磁盘(如 /data/jenkins),可通过设置系统环境变量 JENKINS_HOME 或编辑 /etc/default/jenkins 中的 JENKINS_HOME 实现平滑切换(注意权限与 SELinux/AppArmor 策略)。
- 分离工作区与构建记录:在“系统管理 → 系统配置 → 高级”中分别设置“工作空间根目录”与“构建记录根目录”到其他磁盘,避免单盘成为瓶颈。
- 若使用 Docker 构建:将 Docker 的根目录(如 /var/lib/docker)迁移到大盘(通过修改 /etc/docker/daemon.json 的
"data-root"),并定期清理无用容器、镜像、卷与日志,防止 overlay2 占满磁盘。
五 日常维护与自动化建议
- 设置构建超时:在 Job 配置中启用“构建超时”(如 30 分钟),防止挂起任务持续占用磁盘与资源。
- 限制并发与弹性扩容:在“系统管理 → 节点与云 → 配置”限制 Master 并发,使用 Agent/代理节点分担构建,减少 Master 磁盘与 I/O 压力。
- 精简插件与定期更新:仅保留必要插件,及时更新;减少因插件历史数据与缓存带来的额外占用。
- 例行巡检与告警:每周巡检
${JENKINS_HOME} 与 Docker 使用情况,结合监控(如磁盘使用率阈值告警)与定时任务执行清理脚本,形成闭环治理。