jenkins构建卡死源于节点磁盘长期高负载,需建立识别、约束与自动回收闭环机制:立即清理大workspace、重启agent止血;pipeline中嵌入cleanws()和空间裁剪;配置磁盘巡检告警、丢弃旧构建时同步清理workspace、统一日志轮转。

Jenkins构建卡死在节点磁盘高负载时,往往不是“突然出问题”,而是长期积累的资源失控结果。真正有效的解决方式,不是临时清空几个目录,而是建立从识别、约束到自动回收的闭环机制。
立即止血:快速释放空间并恢复构建
当构建已卡住、执行器被占满、队列堆积时,需优先保障流水线可用性:
- 登录对应构建节点(非Jenkins Master),运行 df -h 确认是否根分区或
$JENKINS_HOME所在分区使用率 ≥90% - 定位大目录:进入
$JENKINS_HOME/workspace,执行du -sh */ | sort -rh | head -10找出占用前10的工作空间 - 对明显异常(如单个Job工作空间 >20GB、存在大量
.git/objects/pack或未清理的target/、node_modules/)可手动清理:rm -rf [job-name]@*(注意保留正在运行的构建对应目录) - 若节点为Linux且使用 systemd,可临时重启 Jenkins agent 服务释放被占用的 inode 或句柄:
sudo systemctl restart jenkins-agent
精准约束:让每个 Job 自带“空间边界”
靠人工清理不可持续。必须把空间控制逻辑嵌入构建生命周期本身:
- 在 Pipeline 脚本开头添加 workspace 清理声明:
options { timeout(time: 30, unit: 'MINUTES'); skipDefaultCheckout(); },配合显式 checkout 避免重复拉取 - 使用
cleanWs()插件动作,在构建结束阶段强制清理,支持排除关键目录:cleanWs(cleanWhenAborted: true, cleanWhenFailure: true, cleanWhenNotBuilt: true, cleanWhenUnstable: true, cleanWhenUpstreamFailed: true, deleteDirs: true, notFailBuild: false) - 对大型项目,在构建后增加归档裁剪步骤:用
sh 'find . -name "*.jar" -size +50M -delete'删除超大临时制品,避免污染 workspace
长效治理:监控+自动干预双保险
仅靠配置仍可能遗漏。需要可观测性和自动化兜底:
- 部署轻量级磁盘巡检脚本(每日定时运行),检测
$JENKINS_HOME/workspace下单个目录是否连续3天增长 >2GB,触发企业微信/钉钉告警 - 在 Jenkins 系统配置中启用 “Discard old builds” 并勾选 “Also discard corresponding workspace”(关键!默认不勾选,只删builds不删workspace)
- 为所有节点配置统一的
logrotate规则,压缩并轮转$JENKINS_HOME/logs/和workspace/**/build.log,防止日志膨胀反噬磁盘
磁盘高负载引发的卡死,本质是构建产物缺乏生命周期管理。控制住 workspace 的生成、使用和销毁节奏,比任何一次手动清理都更可靠。











