Jenkins任務(wù)批量修改的技巧分享
通過腳本命令行批量修改 Jenkins 任務(wù)
最近,筆者所在團(tuán)隊的 Jenkins 所在的服務(wù)器經(jīng)常報硬盤空間不足。經(jīng)查發(fā)現(xiàn)很多任務(wù)沒有設(shè)置“丟棄舊的構(gòu)建”。通知所有的團(tuán)隊檢查自己的 Jenkins 任務(wù)有沒有設(shè)置丟棄舊的構(gòu)建,有些不現(xiàn)實。
一開始想到的是使用 Jenkins的 API 來實現(xiàn)批量修改所有的 Jenkins 任務(wù)。筆者對這個解決方案不滿意,經(jīng) Google 發(fā)現(xiàn)有同學(xué)和我遇到了同樣的問題。他使用的更“技巧”的方式:在 Jenkins 腳本命令行中,通過執(zhí)行 Groovy 代碼操作 Jenkins 任務(wù)。
總的來說,就兩步:
進(jìn)入菜單:系統(tǒng)管理 --> 腳本命令行
在輸入框中,粘貼如下代碼:
import jenkins.model.Jenkins
import hudson.model.Job
import jenkins.model.BuildDiscarderProperty
import hudson.tasks.LogRotator
// 遍歷所有的任務(wù)
Jenkins.instance.allItems(Job).each { job ->
if ( job.isBuildable() && job.supportsLogRotator() && job.getProperty(BuildDiscarderProperty) == null) {
println " \"${job.fullDisplayName}\" 處理中"
job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))
println "$job.name 已更新"
}
}
return;
/**
LogRotator構(gòu)造參數(shù)分別為:
daysToKeep: If not -1, history is only kept up to this days.
numToKeep: If not -1, only this number of build logs are kept.
artifactDaysToKeep: If not -1 nor null, artifacts are only kept up to this days.
artifactNumToKeep: If not -1 nor null, only this number of builds have their artifacts kept.
**/
腳本
腳本命令行介紹
腳本命令行(Jenkins Script Console),它是 Jenkins 的一個特性,允許你在 Jenkins master 和 Jenkins agent 的運(yùn)行時環(huán)境執(zhí)行任意的 Groovy 腳本。這意味著,我們可以在腳本命令行中做任何的事情,包括關(guān)閉 Jenkins,執(zhí)行操作系統(tǒng)命令 rm -rf /(所以不能使用 root 用戶運(yùn)行 Jenkins agent)等危險操作。
除了上文中的,使用界面來執(zhí)行 Groovy 腳本,還可以通過 Jenkins HTTP API:/script執(zhí)行。具體操作,請參考 官方文檔。
問題:代碼執(zhí)行完成后,對任務(wù)的修改有沒有被持久化?
當(dāng)我們代碼job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))執(zhí)行后,這個修改到底有沒有持久化到文件系統(tǒng)中呢(Jenkins 的所有配置默認(rèn)都持久化在文件系統(tǒng)中)?我們看下 hudson.model.Job 的源碼,在addProperty方法背后是有進(jìn)行持久化的:
public void addProperty(JobProperty<? super JobT> jobProp) throws IOException {
((JobProperty)jobProp).setOwner(this);
properties.add(jobProp);
save();
}
小結(jié)
本文章只介紹了批量修改“丟棄舊的構(gòu)建”的配置,如果還希望修改其它配置,可以參考 hudson.model.Job 源碼。
不得不提醒讀者朋友,Jenkins 腳本命令行是一把雙刃劍,大家操作前,請考慮清楚影響范圍。如果有必要,請?zhí)崆白龊脗浞荨?/p>
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)
這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下2017-09-09
spring boot 防止重復(fù)提交實現(xiàn)方法詳解
這篇文章主要介紹了spring boot 防止重復(fù)提交實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了spring boot 防止重復(fù)提交具體配置、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11
Java獲取Process子進(jìn)程進(jìn)程ID方法詳解
這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
JAVA中通過Redis實現(xiàn)延時任務(wù)demo實例
Redis在2.0版本時引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個channel(頻道),與消息隊列中的topic(主題)類似,可以通過redis的發(fā)布訂閱者模式實現(xiàn)延時任務(wù)功能,實例中會議室預(yù)約系統(tǒng),用戶預(yù)約管理員審核后生效,如未審批,需要自動變超期未處理,使用延時任務(wù)2024-08-08
java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行
這篇文章主要介紹了java中的構(gòu)造函數(shù)什么時候被調(diào)用執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
Java中的Valid和Validated的比較內(nèi)容
在本篇文章里小編給大家整理的是關(guān)于Java中的Valid和Validated的比較內(nèi)容,對此有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02

