前言:在 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://www.pswp.cn/diannao/100334.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/100334.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/100334.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode | Hot100

文章目录两数之和字母异位词分组最长连续序列移动零盛水最多的容器三数之和接雨水无重复字符的最长子串找到字符串中所有字母异位词和为 K 的子数组滑动窗口最大值最小覆盖子串最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数矩阵置零螺旋矩阵旋转图像搜索二…

【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022)

论文题目&#xff1a;Uncertainty Modeling for Out-of-Distribution Generalization 论文来源&#xff1a;ICLR 2022 论文作者&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2202.03958 论文源码&#xff1a;https://github.com/lixiaotong97/DSU ​ 一、摘要…

分布式系统单点登录(SSO)状态管理深度解析:从Cookie+Session到JWT的演进之路

分布式系统单点登录(SSO)状态管理深度解析&#xff1a;从CookieSession到JWT的演进之路作者&#xff1a;默语佬 | CSDN博主 在分布式微服务架构盛行的今天&#xff0c;单点登录已成为企业级应用的标准配置。本文将深入探讨SSO状态管理的技术演进&#xff0c;从传统的CookieSess…

从 WPF 到 Avalonia 的迁移系列实战篇7:EventTrigger 的迁移

从 WPF 到 Avalonia 的迁移系列实战篇7&#xff1a;EventTrigger 的迁移 在 WPF 中&#xff0c;EventTrigger 是非常常用的功能&#xff0c;它可以让我们直接在 XAML 中绑定事件与动画或动作&#xff0c;实现 UI 的交互效果。例如按钮点击时旋转、鼠标悬停时变色等。 然而&…

深圳比斯特|电池组PACK自动化生产线厂家概述

电池组PACK自动化生产线是指用于生产电池模组的一套自动化系统。这类生产线主要用于生产各类电池组&#xff0c;如锂离子电池组&#xff0c;应用于电动汽车、储能系统等领域。自动化生产线通过机械设备和计算机控制系统&#xff0c;实现电池组生产过程的自动化和高效率。整条生…

基于librdkafa C++客户端生产者发送数据失败问题处理#2

https://blog.csdn.net/qq_42896627/article/details/149025452?fromshareblogdetail&sharetypeblogdetail&sharerId149025452&sharereferPC&sharesourceqq_42896627&sharefromfrom_link 上次我们介绍了认证失败的问题。这次介绍另一个问题生产者发送失败…

pg卡死处理

[postgresapm ~]$ ps -ef|grep postgres:|grep -v grep|awk {print $2}|xargs kill -9 锁&#xff1a; 1 查找锁表的pid select pid from pg_locks l join pg_class t on l.relation t.oid where t.relkind r and t.relname lockedtable; 2 查找锁表的语句 select pid, …

Spring Boot 与 Elasticsearch 集成踩坑指南:索引映射、批量写入与查询性能

前言Elasticsearch 作为分布式搜索和分析引擎&#xff0c;凭借其高性能、可扩展性和丰富的查询能力&#xff0c;被广泛应用于日志分析、全文检索、电商搜索推荐等场景。 在 Spring Boot 项目中集成 Elasticsearch 已成为很多开发者的日常需求&#xff0c;但真正落地时往往会踩到…

windows 10打开虚拟机平台时,出现错误“找不到引用的汇编”解决办法

通过dism.exe开启虚拟机平台时&#xff0c;出现了以下错误&#xff1a;找不到引用的汇编&#xff0c;如下图所示 通过以下命令进行修复均无效&#xff1a; dism /online /cleanup-image /scanhealth sfc /scannow 最后通过加载windows系统的安装光盘iso, 双击setup.exe以【保…

设计模式(C++)详解——建造者模式(1)

<摘要> 建造者模式是一种创建型设计模式&#xff0c;通过将复杂对象的构建过程分解为多个步骤&#xff0c;使相同的构建过程能够创建不同的表示形式。本文从背景起源、核心概念、设计意图等角度深入解析该模式&#xff0c;结合电脑组装、文档生成等实际案例展示其实现方式…

移动端触摸事件与鼠标事件的触发机制详解

移动端触摸事件与鼠标事件的触发机制详解 在移动端开发中&#xff0c;我们经常会遇到一个现象&#xff1a;一次简单的触摸操作&#xff0c;不仅会触发touch系列事件&#xff0c;还会触发一系列mouse事件&#xff0c;最终甚至会触发click事件。这其实是浏览器为了兼容传统桌面端…

如何科学评估CMS系统性能优化效果?

为什么要评估性能优化效果&#xff1f; 在投入时间精力优化CMS系统后&#xff0c;很多开发者只凭"感觉"判断网站变快了&#xff0c;但这种主观判断往往不可靠。科学评估性能优化效果可以帮助我们&#xff1a; 量化优化成果&#xff1a;用数据证明优化的价值发现潜在问…

中控平台数据监控大屏

中控平台数据监控大屏前言&#xff1a;什么是数据大屏&#xff1f; 数据大屏就像是一个"数字仪表盘"&#xff0c;把复杂的数据用图表、动画等方式直观展示出来。想象一下汽车的仪表盘&#xff0c;能让你一眼看到速度、油量、转速等信息——数据大屏也是这个原理&…

【Vue2手录13】路由Vue Router

一、Vue Router 基础概念与核心原理 1.1 路由本质与核心要素 本质定义&#xff1a;路由是URL路径与页面组件的对应关系&#xff0c;通过路径变化控制视图切换&#xff0c;实现单页应用&#xff08;SPA&#xff09;的无刷新页面切换。核心三要素&#xff1a; router-link&#x…

【Git】零基础入门:配置与初始操作实战指南

目录 1.前言 插播一条消息~ 2.正文 2.1概念 2.2安装与配置 2.3基础操作 2.3.1创建本地仓库 2.3.2配置Git 2.3.3认识工作区&#xff0c;暂存区&#xff0c;版本库 2.3.4版本回退 2.3.5撤销修改 2.3.6删除文件 3.小结 1.前言 在 Java 开发场景中&#xff0c;团队协…

CAD多面体密堆积_圆柱体试件3D插件

插件介绍 CAD多面体密堆积_圆柱体试件3D插件可在AutoCAD内基于重力堆积算法在圆柱体容器内进行多面体的密堆积三维建模。插件采取堆积可视化交互界面&#xff0c;可观察多面体颗粒的堆积动态&#xff0c;并可采用鼠标进行多面体位置的局部微调。插件可设置重力堆积模拟时长参数…

机器学习-模型调参、超参数优化

模型调参 手工超参数微调 以一个好的baseline开始&#xff0c;即&#xff1a;在一些高质量的工具包中的默认设置&#xff0c;论文中的值调一个值&#xff0c;重新训练这个模型来观察变化重复很多次获得对以下的insight&#xff1a; 1、哪个超参数重要 2、模型对超参数的敏感度是…

STM32 单片机开发 - I2C 总线

一、IIC(I2C) 线的作用UART总线 PC端(CPU) <----------> 开发板(STM32U575RIT6)IIC总线 主控芯片(STM32U575RIT6) <---------> 传感器驱动芯片(SHT20/SI7006空气温湿度传感器)二、I2C 总线的概念图 1 I2C 总线示意图图 2 多主机多从机模式示意图I2C 总…

Redis 数据结构源码剖析(SDS、Dict、Skiplist、Quicklist、Ziplist)

Redis 数据结构源码剖析&#xff08;SDS、Dict、Skiplist、Quicklist、Ziplist&#xff09;1. 前言 Redis 的高性能与丰富数据结构密切相关。 核心数据结构包括&#xff1a; SDS&#xff08;Simple Dynamic String&#xff09;&#xff1a;字符串底层实现。Dict&#xff08;哈希…

无人机图传系统的功能解析和技术实现原理

无人机图传系统要将机载摄像头捕捉到的画面以尽可能低的时延、尽可能高的清晰度、稳定可靠地送达地面操作员或指挥中心&#xff0c;进而驱动现场行动。为此&#xff0c;核心功能可以从四个维度来解构&#xff1a;实时性、画质与稳定性、覆盖与冗余、以及安全协同。实时性要求在…