清理 Jenkins 历史构建记录最直接的方式是通过任务配置开启“丢弃旧的构建”功能,或在服务器端使用脚本删除 `$JENKINS_HOME/jobs/` 下的旧构建目录。此方案适用于磁盘空间告急或长期未维护的 Jenkins 实例,操作前务必备份数据并确认不再需要被清理的构建产物和日志。
先说结论:优先通过 Jenkins 界面配置保留策略,紧急情况下再使用服务器命令行清理。
- 适合:磁盘空间不足、构建历史过多导致性能下降的场景
- 先准备:确认 Jenkins 进程权限、备份重要构建产物、停止相关任务
- 验收:磁盘占用明显下降且新构建任务能正常生成日志
命令速用版
以下命令需在 Jenkins 服务器终端执行,请替换 $JENKINS_HOME 为实际路径。
# 1. 诊断磁盘占用最大的目录
cd $JENKINS_HOME
du -sh * | sort -rh | head -10
# 2. 紧急清理 7 天前的构建历史(保留目录结构)
find . -path "*/builds/*" -type d -mtime +7 -exec rm -rf {} \;
# 3. 删除超大日志文件(例如大于 100M)
find . -type f -name "*.log" -size +100M -exec rm -f {} \;为什么会这样
构建历史是 Jenkins 最占存储空间的组成部分,包含日志、制品和元数据。
Jenkins 每次构建都会在 `$JENKINS_HOME/jobs/[Job 名称]/builds/` 目录下生成以构建编号命名的文件夹。随着项目增多和构建频率加快,这些文件夹内的日志文件和构建产物会快速累积。公开资料中有案例显示,单个复杂项目的构建产物可能达到 GB 级别,长期不清理会导致磁盘空间耗尽,进而引发构建失败或服务响应缓慢。
分步处理
1. 定位空间占用根源
使用 ncdu 或 du 命令可视化分析磁盘占用,确认 jobs/ 目录是否为主要占用者。
2. 配置自动丢弃策略(推荐)
进入 Jenkins 任务配置页面,找到“丢弃旧的构建”选项。设置“保持构建的天数”或“保持构建的最大个数”,例如保留最近 10 次构建。此配置会在后续构建中自动清理旧数据,无需人工干预。
3. 脚本批量清理(高级)
对于已积累的历史数据,可使用 Jenkins Script Console 执行 Groovy 脚本批量删除。指定任务名称和最大保留编号,脚本会遍历构建记录并删除编号小于设定值的历史。
怎么验证是否生效
执行 df -h 查看磁盘可用空间是否增加。登录 Jenkins 界面,进入对应任务页面,确认构建历史列表只保留了设定次数内的记录。尝试触发一次新构建,检查是否能正常生成日志且无权限报错。
常见坑
- 权限问题:命令行删除文件时,需确保执行用户与 Jenkins 运行用户一致,避免产生权限冲突导致后续构建失败。
- 误删重要产物:暴力删除
builds目录可能误删需要审计或回滚的特定版本制品,操作前务必确认保留策略。 - Docker 空间混淆:若 Jenkins 运行在容器中,磁盘满可能是 Docker 镜像或容器日志占用,需区分 Jenkins 数据卷与 Docker 系统占用。
常见问题
配置丢弃策略后立即生效吗?
配置保存后不会立即删除旧构建,通常在下次构建触发时或系统后台任务运行时执行清理。
删除构建日志会影响正在运行的任务吗?
不会影响正在运行的任务,但不应删除当前正在构建的编号目录,否则会导致构建状态丢失。
清理后空间没有释放怎么办?
检查是否有文件被进程占用未释放,或确认是否清理了 Docker 容器内的无用资源。
参考来源
- Jenkins 持续集成部署 - 清理历史构建记录,释放服务器空间
- Jenkins 磁盘爆满?3 个高效清理技巧拯救你的 CI/CD 服务器
- Jenkins 构建历史太多怎么办?手把手教你用 Slicing 插件批量清理 (避坑指南)
- Jenkins 磁盘爆满?3 种高效清理方案帮你省下 80% 空间 (附详细步骤)
- 高效管理 Jenkins 存储:构建历史与工作空间清理实战
- Jenkins 服务器报磁盘空间不足的问题解决方案
- 解决 Jenkins 运行时磁盘满的问题
- Jenkins 服务器磁盘空间管理策略
- Jenkins 垃圾清理指南