Debian 上 Jenkins 磁盘空间优化实操
一 快速定位占用
- 查看整体磁盘与分区使用:执行命令:df -h,确认哪个分区吃紧。
- 定位 Jenkins 主目录:非容器可用 ps -ef | grep jenkins 查找 -DJENKINS_HOME=;容器可用 docker inspect jenkins | grep JENKINS_HOME。
- 分析目录占用:进入 $JENKINS_HOME 后执行 du -h -x --max-depth=1,优先关注 jobs/、workspace/、builds/ 等子目录。
- 持续观测:在 Jenkins Web 界面查看构建历史与日志,或用 Prometheus 插件导出指标配合 Grafana 做容量预警。
二 清理与保留策略
- 启用“丢弃旧的构建”(Discard Old Builds):在任务配置的 General 中勾选,并设置
- Days to keep builds / Max # of builds to keep(保留天数与最大构建数)
- 高级中的 Days to keep artifacts / Max # of builds to keep with artifacts(单独控制归档制品)
- 建议值:日常保留 15(两周+1天);紧张时保留 3。
- 批量配置:安装 Configuration Slicing Plugin,在 Manage Jenkins → Configuration Slicing 中批量设置上述四项(注意:部分版本对 Pipeline 任务不生效,需要逐个调整)。
- 立即释放空间(谨慎):在 $JENKINS_HOME/jobs//builds/ 下删除旧构建目录,例如
- 删除 30 天前的构建:find [1-9] -type d -mtime +30 -exec rm -rf {} ;*
- 删除构建号 1–7:find [1-7] -type d -exec rm -rf {} ;
删除后可在 Web 界面执行 Scan Workspace Now 或等待后台任务收敛。
- 制品与日志:若仅需保留少量发布包,可将 Max # of builds to keep with artifacts 设为 1,并缩短 Days to keep artifacts。
三 目录与存储布局优化
- 迁移 JENKINS_HOME:将 JENKINS_HOME 指向大磁盘分区(如 /data/jenkins),可通过系统环境变量或启动器配置;修改后重启生效。
- 分离工作空间与构建记录:在 系统管理 → 系统配置 → 高级 中分别设置 Workspace Root Directory 与 Build Record Root Directory,指向不同磁盘,避免单盘膨胀。
- 构建过程产物流向:将 Maven localRepository、Gradle cache 等重目录迁移到大盘,并在 settings.xml 或构建环境里指向新路径,减少 $JENKINS_HOME 压力。
- 容器场景:若使用 Docker,检查 /var/lib/docker(可用 docker info | egrep -i ‘root|storage’ 查看),定期清理无用镜像与层,避免与 JENKINS_HOME 争用同一磁盘。
四 自动化与长期维护
- 建立例行清理:
- 在 Manage Jenkins → Script Console 定期执行清理脚本(如按时间/数量清理 builds)。
- 使用 Prometheus + Grafana 监控 磁盘使用率、构建时长、队列长度,设置阈值告警。
- 控制并发与频率:在 系统配置 中降低 # of executors 或按节点限流,减少并行构建导致的临时文件堆积。
- 精简插件与依赖:停用不使用的插件,定期更新;减少插件自身日志与缓存开销。
- 容量规划:结合历史增长与业务节奏,为 JENKINS_HOME 与工作空间预留充足余量,必要时横向扩容或冷热分层存储。
五 安全清理与回滚建议
- 操作前:备份 $JENKINS_HOME(至少包含 jobs/、config.xml、credentials.xml 等关键目录与文件)。
- 操作顺序:先停任务或节点 → 执行清理 → 在 Web 界面触发 Reload Configuration from Disk → 验证关键任务可构建与回放。
- 制品归档:对需长期保留的发布包,迁移到制品仓库(如 Nexus/Artifactory)后再清理本地制品,避免误删影响发布。