Jenkins在Linux上如何管理构建历史
小樊
43
2025-12-31 20:55:43
Jenkins在Linux上的构建历史管理
一 存储位置与基本认知
- 构建历史与日志主要位于:${JENKINS_HOME}/jobs/<JOB_NAME>/builds/,其中 JENKINS_HOME 在 Linux 常见默认路径为 /var/lib/jenkins(若以 root 运行也可能是 /root/.jenkins)。该目录下的每个子目录代表一次构建(包含日志、元信息与可能的制品)。理解该目录结构有助于定位与手动维护构建历史。
二 推荐的自动管理方式 丢弃旧的构建
- 在作业配置中启用并合理设置“丢弃旧的构建(Discard Old Builds)”,可按“天数”与“数量”双阈值保留,且可单独设置“制品(Artifacts)”的保留策略,避免无限制增长。
- 配置路径与要点:
- 进入作业 → Configure → General(或 History 区块)→ 勾选“丢弃旧的构建”。
- 常用策略示例:
- 保留最近 10 个构建或 30 天内的构建(满足任一条件即保留):设置 Days to keep builds=30、Max # of builds to keep=10。
- 仅保留最近 5 个构建:设置 Max # of builds to keep=5(天数字段留空或保持默认 -1)。
- 高级项可对制品单独设置保留天数与数量,按需精简空间占用。
- 说明:该策略由 Jenkins 在构建完成或后台任务运行时异步清理,是最安全、最推荐的方式。
三 批量清理与脚本化维护
- 使用“脚本控制台(Script Console)”按条件批量删除(谨慎执行,建议先备份):
- 示例脚本(保留编号大于 N 的构建,删除更旧构建):
- def jobName = “your_job_name”
- def minNumber = 100
- Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number <= minNumber }.each { it.delete() }
- 可按需改为按结果、时间等条件筛选后删除。
- 使用 Jenkins CLI 批量清理(需先安装并配置 CLI):
- 示例命令(删除指定作业下编号小于等于 100 的构建):
- jenkins delete-builds --max-builds-to-keep=100 --url http://your_jenkins_server:port/job/your_job_name/
- 提示:不同版本的 CLI 参数可能略有差异,请以实际环境为准。
- 第三方 CLI 工具(如 jcli)也支持按作业清理历史,适合批量与自动化运维场景。
- 安全建议:
- 删除为不可逆操作,务必先备份重要构建与制品。
- 先在测试环境验证脚本与命令,再在生产环境执行。
四 导出审计与迁移归档
- 通过 REST API 导出构建历史用于审计、迁移或报表:
- 获取所有作业:curl -u user:API_TOKEN “http://JENKINS_URL/api/json?tree=jobs[name,url]”
- 获取某作业的所有构建号:curl -u user:API_TOKEN “http://JENKINS_URL/job/JOB_NAME/api/json?tree=allBuilds[number]”
- 获取单次构建详情:curl -u user:API_TOKEN “http://JENKINS_URL/job/JOB_NAME/BUILD_NUMBER/api/json”
- 可结合 bash/curl/jq 汇总为 CSV/JSON 报表;如启用安全认证,请在请求中使用 -u username:API_TOKEN。
- 若需迁移历史,可先导出关键信息与制品清单,再在新实例中按需恢复或归档。
五 磁盘空间优化与风险控制
- 调整 JENKINS_HOME 到其他磁盘分区(通过环境变量或启动参数),将历史与制品迁移至更大容量的存储,缓解根分区压力。
- 结合“丢弃旧的构建”与制品单独保留策略,做到“保留必要记录,清理过时制品”,兼顾审计追溯与空间效率。
- 避免直接物理删除 builds 目录后不重启或不触发索引刷新,可能导致 Jenkins 页面显示与实际不一致;如采用手工清理,建议操作后重启或触发必要的索引/缓存刷新。