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

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

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

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

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

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

image

三、实操: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 = 否”,会始终保留(方便紧急回滚、版本验证等场景)。

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

image

四、实操: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 工作空间和构建历史,确保清理策略符合实际存储需求。

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

http://www.jsqmd.com/news/762904/

相关文章:

  • 东三省床垫工厂实力排行 硬核品质与服务维度解析 - 奔跑123
  • ChatGPT Adapter:统一多AI服务接口的逆向工程实践
  • Zephyr RTOS设备Web管理框架OpenManager:轻量级嵌入式远程管理方案
  • 36.5@工作清单
  • Milvus RESTful API 实战:不写一行代码,用Postman/Curl搞定向量搜索与管理
  • CCS12.1新功能实测:用Memory Allocation视图5分钟定位CC8编译内存溢出(附SysConfig配置案例)
  • Go语言TUI井字棋实战:Bubble Tea框架与终端游戏开发
  • 闽南师范大学考研辅导班机构推荐:排行榜单与哪家好评测 - michalwang
  • AI代码生成工具aiac实战:从原理到DevOps应用全解析
  • 实测避坑:用SGM61720做BUCK电路,SW引脚电压尖峰怎么压下去?
  • 合同违约合同纠纷律师如何选?西安董颖律师团队告诉你 - 工业品牌热点
  • 如何快速掌握TrollInstallerX:iOS越狱工具的终极安装指南
  • Dify缓存序列化性能黑洞:Protobuf v4.27 vs Jackson 2.15.2实测对比,JSON转二进制后吞吐提升3.8倍
  • 别只当镜像工具用!FTK Imager 4.7.1.2的数据恢复实战:行车记录仪SD卡恢复保姆级教程
  • ESP32玩转1.3寸ST7789屏幕:从点亮到显示中文,一份避坑指南
  • python新手福音,在快马平台零配置开启你的第一行代码
  • 别再只会用color了!CSS渐变、滤镜、倒影文字特效实战(附完整源码)
  • 别再只显示文字了!用0.96寸OLED屏做个迷你游戏机(ESP32 + Arduino)
  • 快速验证openclaw安装:用快马一键生成ubuntu部署脚本原型
  • 氯雷他定口腔崩解片选购与品牌对比指南 - 速递信息
  • 别再只让小车跑圈了!用51单片机给清洁机器人加上“眼睛”和“大脑”(避障+路径规划实战)
  • 如何高效使用AEUX:5分钟从Figma/Sketch到After Effects的终极转换指南
  • Python 爬虫进阶技巧:懒加载图片真实地址批量提取
  • 别再傻傻分不清了!Spring中setInstanceSupplier和FactoryBean到底怎么选?附实战场景对比
  • 从LCD刷屏到UI动画:深入拆解STM32的DMA2D,让你的图形界面飞起来
  • 智能客服系统集成 Taotoken 以平衡响应质量与 API 调用成本
  • 突破网速瓶颈!2025年最值得拥有的八大网盘直链解析神器
  • 告别卡死!STM32F4/F1 SDIO DMA读写SD卡全流程调试与常见问题排查指南
  • 揭秘Python高并发抢票系统:从毫秒级响应到分布式部署的实战突破
  • 本地千万级图片秒搜:你的个人智能图库管理终极方案