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://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;實時性、畫質與穩定性、覆蓋與冗余、以及安全協同。實時性要求在…