当前位置: 首页 > news >正文

Jenkins 构建清理策略:自带功能 vs Discard Old Build 插件,全场景实操指南

前言:在 Jenkins 持续集成过程中,构建记录、工作空间、产物包会不断积累,既占用磁盘空间,也会让构建历史变得臃肿。Jenkins 自带的“丢弃旧的构建”功能和 Discard Old Build 插件,是两种常见的构建清理方案。本文将详细对比两者,并通过实操演示帮助你选择最适合的策略。

一、核心对比:Jenkins 自带功能 vs Discard Old Build 插件

特性Jenkins 自带功能(丢弃旧的构建)Discard Old Build 插件
安装依赖无需安装,Jenkins 默认自带需要手动安装(额外维护成本)
配置难度简单,Job 配置中直接勾选配置稍复杂,需学习插件专属策略配置
清理策略仅支持 按「构建数量」或「天数」 清理支持更多维度:
- 按构建状态(成功/失败/不稳定)
- 按分支/标签过滤
- 按磁盘空间阈值触发
- 多条件组合逻辑
实时清理否,需等待新构建触发后执行清理否,仍需构建触发,但可结合条件更灵活触发
适用场景单一规则(如 保留最近 3 次构建复杂场景(多分支管理、磁盘保护、差异化保留特定构建)
风险无额外风险,官方原生功能插件版本更新不及时可能引发 Jenkins 兼容性问题
维护成本低(无需关注插件版本)中等(需关注插件更新与兼容性)

二、决策流程图:如何选择清理方案?

在这里插入图片描述

三、实操:Jenkins 自带“丢弃旧的构建”功能(简单场景 + 发布包参数详解)

场景范例:某项目需实现两个核心目标:

  • 构建记录层面:仅保留最近 3 次构建记录,不通过“天数”额外限制;
  • 发布包层面:仅保留“最近 1 天内 + 最近 1 次构建”生成的发布包(如 jar/war 等部署产物),且不删除最新一次构建的发布包。
步骤 1:进入任务配置页
  1. 登录 Jenkins 平台,找到目标任务(如截图中的任务),点击进入任务详情页。
  2. 点击左侧菜单栏的 “配置” 选项,进入任务配置界面。
步骤 2:配置“构建记录”的核心保留规则

在配置页面中,找到并勾选 “丢弃旧的构建”(启用自动清理功能),然后设置基础规则:

  • 保持构建的天数:清空输入框(表示“不按‘天数’限制构建记录的保留周期”)。
  • 保持构建的最大个数:输入 3(表示“仅保留最近 3 次构建记录”)。
步骤 3:详解“发布包专属参数”(对应截图中3个参数)

在“丢弃旧的构建”区域,点击 “高级” 展开发布包配置,以下是对3个参数的详细解释:

1. 发布包保留天数
  • 作用仅针对“发布包文件”,按“时间周期”控制保留时长。
  • 配置逻辑:若填写非空值(如当前配置为 1),则生成超过 1 天的发布包会被自动删除,但该次构建的日志、操作历史、测试报告等“非产物类记录”会被保留
  • 场景匹配:填 1 后,“发布包生成超过 1 天”就会触发清理,而构建记录本身(如构建编号、日志)仍由上方“保持构建的最大个数(3)”规则管理。
2. 发布包最大保留#个构建
  • 作用仅针对“发布包文件”,按“构建次数”控制保留数量。
  • 配置逻辑:若填写非空值(如当前配置为 1),则只保留最近 1 次构建生成的发布包,更早构建的发布包会被自动清理(但不影响构建记录的保留)。
  • 场景匹配:填 1 后,“不管发布包生成多久,仅留最近 1 次构建的发布包”;与“发布包保留天数(1)”形成**“或逻辑”**——发布包“超过 1 天”“不是最近 1 次构建的”,都会被清理。
3. Remove last build(是否删除最后一次构建)
  • 作用:控制“最新一次构建”的发布包(及关联资源)是否会被清理规则影响。
  • 配置逻辑
    • “是”:最新一次构建的发布包、日志等所有资源,都可能被清理规则删除(不推荐,会丢失最新版本的追溯性)。
    • “否”(当前选中状态):最新一次构建的发布包、日志等资源不会被清理,仅清理更早的构建相关资源。
  • 场景匹配:选“否”,确保“最新一次构建的发布包”始终保留,方便紧急回滚或版本验证。
步骤 4:保存配置

点击页面底部的 “Save” 按钮,使“构建记录保留 + 发布包保留”的所有配置生效。

效果验证逻辑
  • 构建记录:新构建触发后,若历史构建数超过 3 次,最旧的构建记录会被自动清理,最终仅保留最近 3 次。
  • 发布包
    • 超过 1 天的发布包,会被“发布包保留天数(1)”清理;
    • 非最近 1 次构建的发布包,会被“发布包最大保留#个构建(1)”清理;
    • 最新一次构建的发布包,因“Remove last build = 否”,始终保留。
步骤 5:效果验证

配置保存后,后续每次新构建触发时,Jenkins 会自动执行分层清理逻辑:

  • 构建记录维度:若历史构建数量超过 3 次,最旧的构建记录会被自动删除,最终仅保留最近 3 次构建的完整元数据(包括构建日志、操作历史、测试报告等)。
  • 发布包维度
    • 生成时间超过 1 天的发布包,会被“发布包保留天数(1)”规则清理;
    • 不是“最近 1 次构建”生成的发布包,会被“发布包最大保留#个构建(1)”规则清理;
    • 最新一次构建生成的发布包,因“Remove last build = 否”,会始终保留(方便紧急回滚、版本验证等场景)。

这套配置既通过 构建个数限制 控制了历史记录的整体规模,又通过 发布包专属规则 精细化管理了部署产物的存储占用,最终实现 轻量化存储 + 关键版本可追溯 的平衡。

在这里插入图片描述

四、实操:Discard Old Build 插件(复杂场景)

场景范例:某多分支项目需“保留 main 分支最近 5 次成功构建,其他分支仅保留最近 2 次构建;且当磁盘占用超 80% 时,强制清理所有分支的旧构建”。

步骤 1:安装 Discard Old Build 插件

  1. 进入 Jenkins 首页,点击左侧 “Manage Jenkins”“插件管理”
  2. 切换到 “可选插件” 标签页,在搜索框输入 Discard Old Build
  3. 找到插件后,勾选左侧复选框,点击 “直接安装”(或“下载待重启后安装”,根据 Jenkins 状态选择)。
  4. 等待安装完成(页面会显示安装进度,完成后可查看“已安装插件”确认)。

步骤 2:进入任务配置页

同“自带功能”步骤 1,进入目标任务(如 MultiBranch-Project)的配置界面。

步骤 3:配置 Discard Old Build 策略

  1. 下拉页面,找到 “构建后操作” 区域,点击 “添加构建后操作” → 选择 “Discard old builds (advanced)”(插件提供的高级清理选项)。

  2. 配置核心策略(以场景需求为例):

    • General Settings(通用设置)
      • Days to keep builds:留空(不按天数全局限制)。
      • Max # of builds to keep:留空(不按全局个数限制,改为分支级控制)。
    • Branch-Specific Rules(分支特定规则)
      点击 “Add Branch Rule”,配置 main 分支规则:
      • Branch Name:输入 main(匹配主分支)。
      • Days to keep builds for this branch:留空。
      • Max # of builds to keep for this branch:输入 5
      • Only keep builds that were successful:勾选(仅保留成功构建)。
        再点击 “Add Branch Rule”,配置其他分支规则:
      • Branch Name:输入 .*(正则表达式,匹配所有分支)。
      • Max # of builds to keep for this branch:输入 2
    • Disk Space Trigger(磁盘空间触发)
      勾选 Enable disk space trigger,设置:
      • Free disk space threshold:输入 20(表示“剩余磁盘空间 < 20% 时触发清理”)。
      • 触发时的清理规则:可选择“删除所有超过 1 天的构建”等(根据需求细化)。

步骤 4:保存配置

点击页面底部 “保存” 按钮,插件配置生效。

效果

  • main 分支仅保留最近 5 次成功构建;
  • 其他分支仅保留最近 2 次构建;
  • 当 Jenkins 所在磁盘剩余空间 < 20% 时,自动触发额外清理逻辑。

五、总结与最佳实践

  1. 优先用自带功能:若需求是“简单的数量/天数保留”,直接用 Jenkins 自带功能,无需额外插件,稳定且易维护。
  2. 插件用于复杂场景:当需要“按状态、分支、磁盘空间等多维度控制”时,再安装 Discard Old Build 插件,发挥其灵活性。
  3. 定期Review:无论用哪种方案,建议每月检查 Jenkins 工作空间和构建历史,确保清理策略符合实际存储需求。

通过本文的对比和实操,你可以根据项目场景,精准选择构建清理方案,既保证历史可追溯,又能有效控制磁盘占用~
在这里插入图片描述


文章转载自:

http://3bDZPIkR.sfdky.cn
http://xW4Lc0Y1.sfdky.cn
http://nr93Gxmx.sfdky.cn
http://xs4aN6gD.sfdky.cn
http://Crv0F67A.sfdky.cn
http://pgHjA6Rr.sfdky.cn
http://YKdqoB10.sfdky.cn
http://tgCHiaYG.sfdky.cn
http://8foGXwkn.sfdky.cn
http://KoKf1A78.sfdky.cn
http://50Haypy7.sfdky.cn
http://T88b2d87.sfdky.cn
http://fGMZDU2f.sfdky.cn
http://hCQXvTzb.sfdky.cn
http://HivgEbK8.sfdky.cn
http://Uydcu3JM.sfdky.cn
http://unU94yaG.sfdky.cn
http://uAxgUAKO.sfdky.cn
http://Ti5QLa8f.sfdky.cn
http://MKJc6nrt.sfdky.cn
http://v59INRLT.sfdky.cn
http://EIHtGDZp.sfdky.cn
http://L8qp2W35.sfdky.cn
http://dEQa8bes.sfdky.cn
http://U0waB6os.sfdky.cn
http://2CkvWgTt.sfdky.cn
http://VBTo83th.sfdky.cn
http://JLJaftBy.sfdky.cn
http://u24mcfI9.sfdky.cn
http://4ZZ3tBXm.sfdky.cn
http://www.dtcms.com/a/385605.html

相关文章:

  • DevOps历程-Gogs的安装与部署
  • FreeRTOS 任务静态创建与句柄详解
  • 嵌入式音视频开发——RTMP协议详解
  • 每日一题(6)
  • 信号量主要API及综合应用
  • 【开题答辩全过程】以 B站用户视频喜好倾向数据分析系统为例,包含答辩的问题和答案
  • ARM架构学习6.2——中断理解
  • 搭建Qt5.14.2+msvc2017_x64项目测试Opencv4.10功能
  • Steger 算法 的原理和流程
  • WD5030K:一款7-30V宽输入范围、12A高效同步降压DC-DC转换器芯片详解
  • 《2025年AI产业发展十大趋势报告》五十七
  • 滴滴试点返程费自主议价将会怎么改变市场?
  • 【嵌入式原理系列-第八篇】USART从原理到配置全解析
  • Python4-seaborn
  • 使用 Aamzon Step Functions 重构无服务器工作流
  • 模电基础:场效应管
  • Typescript工具类型
  • Spring异步编程- 浅谈 Reactor 核心操作符
  • 21.5 单卡24G训7B大模型!HuggingFace TRL+QLoRA实战,3倍提速显存直降70%
  • git中,如果在文件夹A下有文件夹B、C文件夹,现在在A下创建仓库,连接远程仓库,那么如何在提交的时候忽略B、C,排除对B、C管理
  • Java Web 入门实战:SpringBoot+Spring MVC 从 0 到 1 学习指南
  • 电磁流量计可靠品牌之选,基恩士提供多样化解决方案
  • 三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
  • Baklib:从传统到AI驱动的新一代数字体验平台
  • 机器视觉在人形机器人中有哪些检测应用
  • Java的Arrays类
  • 每天认识一个电子器件之LED灯
  • 每日前端宝藏库 | anime.js⏳✨
  • CSS脉冲光环动画效果
  • C++ 之【C++11的简介】(可变参数模板、lambda表达式、function\bind包装器)