Jenkins任務(wù)批量修改的技巧分享
通過(guò)腳本命令行批量修改 Jenkins 任務(wù)
最近,筆者所在團(tuán)隊(duì)的 Jenkins 所在的服務(wù)器經(jīng)常報(bào)硬盤(pán)空間不足。經(jīng)查發(fā)現(xiàn)很多任務(wù)沒(méi)有設(shè)置“丟棄舊的構(gòu)建”。通知所有的團(tuán)隊(duì)檢查自己的 Jenkins 任務(wù)有沒(méi)有設(shè)置丟棄舊的構(gòu)建,有些不現(xiàn)實(shí)。
一開(kāi)始想到的是使用 Jenkins的 API 來(lái)實(shí)現(xiàn)批量修改所有的 Jenkins 任務(wù)。筆者對(duì)這個(gè)解決方案不滿(mǎn)意,經(jīng) Google 發(fā)現(xiàn)有同學(xué)和我遇到了同樣的問(wèn)題。他使用的更“技巧”的方式:在 Jenkins 腳本命令行中,通過(guò)執(zhí)行 Groovy 代碼操作 Jenkins 任務(wù)。
總的來(lái)說(shuō),就兩步:
進(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 的一個(gè)特性,允許你在 Jenkins master 和 Jenkins agent 的運(yùn)行時(shí)環(huán)境執(zhí)行任意的 Groovy 腳本。這意味著,我們可以在腳本命令行中做任何的事情,包括關(guān)閉 Jenkins,執(zhí)行操作系統(tǒng)命令 rm -rf /(所以不能使用 root 用戶(hù)運(yùn)行 Jenkins agent)等危險(xiǎn)操作。
除了上文中的,使用界面來(lái)執(zhí)行 Groovy 腳本,還可以通過(guò) Jenkins HTTP API:/script執(zhí)行。具體操作,請(qǐng)參考 官方文檔。
問(wèn)題:代碼執(zhí)行完成后,對(duì)任務(wù)的修改有沒(méi)有被持久化?
當(dāng)我們代碼job.addProperty(new BuildDiscarderProperty(new LogRotator (2, 10, 2, 10)))執(zhí)行后,這個(gè)修改到底有沒(méi)有持久化到文件系統(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 腳本命令行是一把雙刃劍,大家操作前,請(qǐng)考慮清楚影響范圍。如果有必要,請(qǐng)?zhí)崆白龊脗浞荨?/p>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- jenkins 配置用戶(hù)角色權(quán)限的實(shí)現(xiàn)方法
- Docker下利用jenkins和docker實(shí)現(xiàn)持續(xù)交付
- 詳解jenkins自動(dòng)化部署vue
- 使用Jenkins Pipeline自動(dòng)化構(gòu)建發(fā)布Java項(xiàng)目的方法
- 使用Jenkins部署React項(xiàng)目的方法步驟
- jenkins中通過(guò)Publish Over SSH插件將項(xiàng)目部署到遠(yuǎn)程機(jī)器上的講解說(shuō)明
- jenkins配置python腳本定時(shí)任務(wù)過(guò)程圖解
相關(guān)文章
java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)
這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下2017-09-09spring boot 防止重復(fù)提交實(shí)現(xiàn)方法詳解
這篇文章主要介紹了spring boot 防止重復(fù)提交實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了spring boot 防止重復(fù)提交具體配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11Java獲取Process子進(jìn)程進(jìn)程ID方法詳解
這篇文章主要介紹了Java獲取Process子進(jìn)程進(jìn)程ID方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12JAVA中通過(guò)Redis實(shí)現(xiàn)延時(shí)任務(wù)demo實(shí)例
Redis在2.0版本時(shí)引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個(gè)channel(頻道),與消息隊(duì)列中的topic(主題)類(lèi)似,可以通過(guò)redis的發(fā)布訂閱者模式實(shí)現(xiàn)延時(shí)任務(wù)功能,實(shí)例中會(huì)議室預(yù)約系統(tǒng),用戶(hù)預(yù)約管理員審核后生效,如未審批,需要自動(dòng)變超期未處理,使用延時(shí)任務(wù)2024-08-08java中的構(gòu)造函數(shù)什么時(shí)候被調(diào)用執(zhí)行
這篇文章主要介紹了java中的構(gòu)造函數(shù)什么時(shí)候被調(diào)用執(zhí)行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Java中的Valid和Validated的比較內(nèi)容
在本篇文章里小編給大家整理的是關(guān)于Java中的Valid和Validated的比較內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02