news 2026/7/6 13:28:56

Jenkins 构建历史管理与磁盘清理全攻略:5步根治服务器磁盘爆满

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jenkins 构建历史管理与磁盘清理全攻略:5步根治服务器磁盘爆满

Jenkins 构建历史管理与磁盘清理全攻略:5步根治服务器磁盘爆满

      • 📈 构建历史管理全景流程图
      • 一、核心概念:构建历史到底占用了哪些空间?
        • 1. 构建历史的存储结构
        • 2. 磁盘空间占用分析
      • 二、策略一:全局自动清理配置(最基础)
        • 操作步骤
      • 三、策略二:Job 级别的丢弃策略(最常用)
        • 操作步骤
      • 四、策略三:Pipeline 中主动清理(最灵活)
        • 1. 清理工作空间
        • 2. 归档产物按需清理
        • 3. 使用 buildDiscarder 属性(脚本式Pipeline)
      • 五、策略四:脚本批量清理(应急救火)
        • 1. Groovy脚本(在Jenkins Script Console中执行)
        • 2. Shell脚本(直接在服务器执行)
      • 六、监控体系:从被动清理到主动预警
        • 1. 安装磁盘监控插件
        • 2. 配置磁盘阈值告警
        • 3. 定期巡检Pipeline
      • 📊 四种清理策略对比
      • 📚 常见问题排查
      • 💎 总结

🌺The Begin🌺点点关注,收藏不迷路🌺

⬇ ⬇ 底部 ⬇ ⬇

你是否遇到过这样的场景:Jenkins运行了半年后,服务器磁盘突然告警,登录一看,jobs目录占用了上百GB空间——几万次的历史构建、几百G的归档产物,让服务器不堪重负。构建历史管理就是解决这一问题的系统性方案。

📈 构建历史管理全景流程图

先通过一张图理解构建历史从产生到清理的完整生命周期:

定期执行

⚙️ 每次Pipeline执行

📦 生成构建记录

存储内容

📋 构建日志
log文件

📦 归档产物
artifacts

📊 JUnit测试报告

💾 工作空间快照

存储于 $JENKINS_HOME/jobs/

管理策略

策略1: 全局自动清理配置

策略2: Job级别丢弃策略

策略3: Pipeline中清理

策略4: 脚本批量删除

🗑️ 清理过期构建

✅ 释放磁盘空间

📊 监控 + 告警

核心逻辑:构建历史管理是一个闭环——清理不是目的,建立自动化的清理策略 + 监控告警才是根本。


一、核心概念:构建历史到底占用了哪些空间?

在动手清理之前,必须搞清楚Jenkins到底把数据存在哪里、存了什么。

1. 构建历史的存储结构

Jenkins构建数据存储路径:

$JENKINS_HOME/jobs/ ├── project-A/ │ ├── builds/ │ │ ├──1/# 第1次构建│ │ │ ├── log# 构建日志│ │ │ ├── archive/# 归档产物(jar包等)│ │ │ ├── junitResult.xml# 测试报告│ │ │ └── build.xml# 构建元数据│ │ ├──2/# 第2次构建│ │ └──... │ ├── workspace/# 工作空间(可能很大)│ └── config.xml# Job配置└── project-B/ └──...
2. 磁盘空间占用分析
存储内容磁盘占用比例清理优先级
归档产物(Artifacts)40-60%⭐⭐⭐⭐⭐ 最高
工作空间(Workspace)20-30%⭐⭐⭐⭐
构建日志(Logs)10-15%⭐⭐⭐
测试报告(Reports)5-10%⭐⭐
构建元数据(XML)1-5%⭐(不建议清理)

关键认知:归档产物(Artifacts)和工作空间(Workspace)是最大的磁盘消耗者,应作为清理的重点目标。


二、策略一:全局自动清理配置(最基础)

这是Jenkins内置的**全局兜底策略**,对所有Job生效。

操作步骤
  1. 登录Jenkins,进入Manage Jenkins → System
  2. 找到Global Build Discarders部分。
  3. 勾选并配置清理策略。

推荐配置:

策略类型:Log Rotation 保留天数:30天 保留最大构建数:50

注意:

  • 这个配置是全局默认值,每个Job可以独立覆盖。
  • 建议设置得宽松一些(如保留30天),然后在个别高频Job上单独收紧。

三、策略二:Job 级别的丢弃策略(最常用)

对于每天构建几十次的高频项目,需要在Job级别设置更激进的清理策略。

操作步骤
  1. 进入具体Job的Configure → General
  2. 找到Discard old builds(丢弃旧的构建)。
  3. 配置以下参数:

策略配置说明:

参数推荐值(高频Job)推荐值(低频Job)说明
Days to keep builds7天30天按时间保留
Max # of builds to keep20次50次按数量保留
Days to keep artifacts3天14天产物保留时长(可短于构建保留)
Max # of builds with artifacts5次20次只保留最近N次的产物

工作机制:两个条件以**先满足者为准**。例如同时设置"保留7天"和"保留20次",某天第21次构建成功时,即使它只过了1天,最老的第1次也会被清理。

最佳实践:

  • 归档产物(Artifacts)的保留时长应短于构建记录。
  • 生产发布Job的构建历史建议永久保留(不设置丢弃策略)。
  • 特性分支Job建议保留5次以内

四、策略三:Pipeline 中主动清理(最灵活)

在Pipeline脚本中,可以精确控制构建结束后清理哪些内容。

1. 清理工作空间

声明式Pipeline示例:

pipeline{agent any stages{stage('Build'){steps{sh'mvn clean package'}}}post{always{// 方法1:使用cleanWs插件清理工作空间cleanWs(cleanWhenAborted:true,cleanWhenFailure:true,cleanWhenNotBuilt:true,cleanWhenUnstable:true,deleteDirs:true,patterns:[[pattern:'target/',type:'INCLUDE'],[pattern:'node_modules/',type:'INCLUDE']])// 方法2:直接删除目录// deleteDir()}}}
2. 归档产物按需清理
pipeline{agent any stages{stage('Archive'){steps{// 仅归档重要产物archiveArtifacts artifacts:'target/*.jar',fingerprint:true}}}post{always{// 清理构建过程中产生的临时文件sh''' rm -rf target/tmp/ rm -rf target/*-sources.jar '''}}}
3. 使用 buildDiscarder 属性(脚本式Pipeline)
properties([buildDiscarder(logRotator(artifactDaysToKeepStr:'3',artifactNumToKeepStr:'10',daysToKeepStr:'7',numToKeepStr:'30'))])node{stage('Build'){// 构建逻辑}}

优势:将清理策略代码化,随Jenkinsfile版本控制,团队成员都能看到和修改。


五、策略四:脚本批量清理(应急救火)

当磁盘已经爆满,需要**立即释放空间**时,使用脚本批量操作。

1. Groovy脚本(在Jenkins Script Console中执行)

进入Manage Jenkins → Script Console,执行以下脚本:

批量删除所有Job的旧构建(保留最近10次):

// 遍历所有JobJenkins.instance.allItems.findAll{itinstanceofhudson.model.Job}.each{job->println"清理Job:${job.fullName}"// 获取所有构建记录,按编号倒序排列defbuilds=job.builds.sort{it.number}.reverse()// 保留最近10次构建defbuildsToKeep=10if(builds.size()>buildsToKeep){builds.drop(buildsToKeep).each{build->println" 删除构建 #${build.number}"build.delete()}}}println"清理完成!"

仅清理构建产物,保留构建日志:

Jenkins.instance.allItems.findAll{itinstanceofhudson.model.Job}.each{job->println"清理产物:${job.fullName}"job.builds.each{build->// 获取归档产物目录defartifactsDir=newFile(build.rootDir,'archive')if(artifactsDir.exists()){defsize=artifactsDir.directorySize()println" 构建 #${build.number}产物大小:${size/ 1024 /1024}MB"// 删除产物(保留构建记录和日志)artifactsDir.deleteDir()println" 已删除构建 #${build.number}的产物"}}}

查找并清理大文件构建:

// 查找所有构建,按磁盘占用排序defbuildSizes=[]Jenkins.instance.allItems.findAll{itinstanceofhudson.model.Job}.each{job->job.builds.each{build->defsize=build.rootDir.directorySize()buildSizes<<[job:job.fullName,number:build.number,sizeMB:size/ 1024 /1024]}}// 按大小降序排列,输出前20个buildSizes.sort{-it.sizeMB}.take(20).each{println"${it.job}- Build #${it.number}:${it.sizeMB.round(2)}MB"}
2. Shell脚本(直接在服务器执行)

查找占用最大的Job目录:

#!/bin/bashJENKINS_HOME="/var/lib/jenkins"echo"=== Jenkins 磁盘占用 Top 20 ==="du-sh$JENKINS_HOME/jobs/*/|sort-rh|head-20echo""echo"=== Workspace 占用 Top 10 ==="du-sh$JENKINS_HOME/jobs/*/workspace/|sort-rh|head-10

删除所有超过30天的构建产物:

#!/bin/bashJENKINS_HOME="/var/lib/jenkins"DAYS_OLD=30echo"清理超过${DAYS_OLD}天的构建产物..."find$JENKINS_HOME/jobs/*/builds/-maxdepth3-typed-name"archive"-mtime+$DAYS_OLD|whilereaddir;doecho"删除:$dir(大小:$(du-sh$dir|cut-f1))"rm-rf"$dir"doneecho"清理完成!"

⚠️ 安全警告:使用Shell脚本前务必:

  1. 先备份$JENKINS_HOME
  2. 在测试环境验证脚本。
  3. 确认find命令的-mtime参数逻辑正确。

六、监控体系:从被动清理到主动预警

清理只是治标,监控才是治本。

1. 安装磁盘监控插件

安装Disk Usage Plugin

  • 进入Manage Jenkins → Plugins,搜索安装Disk Usage
  • 安装后在Manage Jenkins页面看到Disk Usage链接。
  • 可视化管理每个Job的磁盘占用。
2. 配置磁盘阈值告警

Manage Jenkins → System中设置:

磁盘空闲空间告警阈值:10GB 当低于阈值时:发送邮件通知管理员
3. 定期巡检Pipeline

创建一个专门的Jenkins Job,每周执行一次磁盘巡检:

pipeline{agent any triggers{cron('0 8 * * 1')// 每周一早上8点执行}stages{stage('Check Disk Usage'){steps{script{defjenkinsHome=newFile('/var/lib/jenkins')deffreeSpace=jenkinsHome.freeSpace/ 1024 /1024/1024deftotalSpace=jenkinsHome.totalSpace/ 1024 /1024/1024echo"Jenkins磁盘总空间:${totalSpace.round(2)}GB"echo"Jenkins磁盘剩余空间:${freeSpace.round(2)}GB"if(freeSpace<10){emailext(subject:"🚨 Jenkins磁盘空间不足告警",body:"剩余空间:${freeSpace.round(2)}GB,请立即清理!",to:'admin@company.com')error"磁盘空间不足,巡检失败!"}}}}stage('Clean Old Workspaces'){steps{sh''' find /var/lib/jenkins/jobs/*/workspace/ \ -maxdepth 0 \ -type d \ -mtime +14 \ -exec rm -rf {} \\; '''}}}}

📊 四种清理策略对比

策略适用场景粒度优点缺点
全局配置兜底策略全局简单、一劳永逸无法差异化处理
Job级别日常管理Job级灵活、精细需逐个配置
Pipeline中代码化团队协作构建级可版本控制、精确需要编码能力
脚本批量应急救火无限制快速、强力风险高、不可逆

📚 常见问题排查

问题原因解决方案
设置了丢弃策略但没生效旧策略与新策略冲突手动删除一次旧构建,后续自动策略生效
Pipeline脚本清理失败Jenkins用户无删除权限确认Jenkins进程用户对jobs/目录有写权限
清理后磁盘空间未释放删除的文件仍被进程占用重启Jenkins服务或使用lsof检查占用
构建历史被误删脚本参数过大提前备份,使用更保守的保留数量

💎 总结

通过本文,你已建立完整的Jenkins构建历史管理知识体系:

  1. 四层清理策略:全局配置 → Job级别 → Pipeline脚本 → 应急脚本。
  2. 空间占用大头:归档产物(40-60%)和工作空间(20-30%)应优先清理。
  3. 保留原则:构建日志保留时间 > 归档产物保留时间;生产Job永久保留。
  4. 监控闭环:定期巡检 + 阈值告警,变被动清理为主动预防。

黄金法则:不要把Jenkins当仓库——构建产物的归宿是Nexus/Artifactory,构建历史的归宿是定期归档,工作空间永远是临时的。做好这三点,你的Jenkins服务器就能长期保持健康状态。


🌺The End🌺点点关注,收藏不迷路🌺

⬆ ⬆ 顶部 ⬆ ⬆
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 13:17:01

Java开发入门指南:从基础到项目实战的完整路径

如果你正准备踏入Java开发的世界&#xff0c;那么你需要的不仅仅是一堆课程列表&#xff0c;而是一条清晰的、经过验证的成长路径。很多初学者在“Hello World”之后疯狂收集书单、视频和论坛帖子&#xff0c;结果却在面向对象、集合框架、IO流这些关卡前卡住半年。别怕&#x…

作者头像 李华
网站建设 2026/7/6 13:13:40

chrome浏览器官方下载离线安装包鸿蒙安卓mac苹果win电脑纯净版

谷歌浏览器 Chrome浏览器安装包 官方正版离线安装包&#xff0c;支持中文界面&#xff01; 资料在下方 Chrome浏览器安装包下载 提取码: 3npc 特点: 离线安装&#xff0c;纯净无广告 最新版运行稳定&#xff0c;适配主流系统附带详细安装说明&#xff0c;小白也能轻松搞定拍…

作者头像 李华
网站建设 2026/7/6 13:13:08

B站缓存视频格式转换完全指南:解锁跨平台播放的终极方案

B站缓存视频格式转换完全指南&#xff1a;解锁跨平台播放的终极方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是不是曾经在B站缓存了喜欢…

作者头像 李华