如何通過Jenkins定期清理為None的鏡像詳解
前言
在代碼持續(xù)交付過程中,依靠Jenkins生產(chǎn)Docker鏡像時(shí),會(huì)生成許多的名為None的中間鏡像,這些鏡像在整個(gè)項(xiàng)目生產(chǎn)過程完畢后意義不大,還占著空間,需要定期清理,通過手動(dòng)方式實(shí)在是繁瑣,也就有了定期清理。
Jenkins是一個(gè)功能強(qiáng)大的應(yīng)用程序,允許持續(xù)集成和持續(xù)交付項(xiàng)目,無論用的是什么平臺。這是一個(gè)免費(fèi)的源代碼,可以處理任何類型的構(gòu)建或持續(xù)集成。集成Jenkins可以用于一些測試和部署技術(shù)。Jenkins是一種軟件允許持續(xù)集成。
下面話不多說了,來一起看看詳細(xì)的介紹吧
一、手動(dòng)方式清理
比較簡便的清理方式,適合有單個(gè)none鏡像產(chǎn)生時(shí)手動(dòng)執(zhí)行命令清理鏡像,執(zhí)行如下命令:
docker rmi $(docker images -f "dangling=true" -q)
由于我本地已經(jīng)沒有了none的鏡像,因此執(zhí)行就只能看到如下效果
二、項(xiàng)目生產(chǎn)結(jié)束后清理
在Jenkins中建立一個(gè)滿足CI的項(xiàng)目時(shí),生產(chǎn)過程完畢結(jié)束后清理可以在構(gòu)建執(zhí)行腳本內(nèi)設(shè)置,如:
其中的腳本為:
echo ---------------Clear-Images...------------------ clearImagesList=$(docker images -f "dangling=true" -q) if [ ! -n "$clearImagesList" ]; then echo "no images need clean up." else docker rmi $(docker images -f "dangling=true" -q) echo "clear success." fi
當(dāng)項(xiàng)目構(gòu)建完畢后,執(zhí)行這個(gè),將本身構(gòu)建過程中生成的None鏡像清楚,做到自己清除自己的中間產(chǎn)物。
但是有一個(gè)嚴(yán)重問題會(huì)產(chǎn)生,當(dāng)兩個(gè)或多個(gè)項(xiàng)目在同時(shí)構(gòu)建時(shí),先構(gòu)建完畢后執(zhí)行清除的腳本將會(huì)影響正在構(gòu)建過程中的項(xiàng)目,刪除正在構(gòu)建過程中所產(chǎn)生的none,但是刪除失敗進(jìn)而引發(fā)錯(cuò)誤,導(dǎo)致先構(gòu)建的項(xiàng)目構(gòu)建失敗,在多個(gè)項(xiàng)目的情況下不推薦這種方式,如果在Jenkins中只有單個(gè)任務(wù)在跑,那沒得問題。
三、定時(shí)任務(wù)清理
比較喜歡這種方式,新建一個(gè)Jenkins定時(shí)任務(wù),比如我設(shè)置為晚上十二點(diǎn)清理為none的鏡像,步驟如下:
1、Jenkins中新建一個(gè)項(xiàng)目,名字隨意,如我的為ClearImage。
2、構(gòu)建觸發(fā)器,選擇Poll SCM,設(shè)置定時(shí)時(shí)間,如我設(shè)置的是凌晨時(shí)分清理,也可設(shè)置其他時(shí)間,具體設(shè)置規(guī)則參見右邊問號。
3、執(zhí)行構(gòu)建腳本,腳本內(nèi)容在之前已經(jīng)給出,保存完畢即可,
手動(dòng)執(zhí)行立即構(gòu)建,驗(yàn)證是否有效:
查看控制臺輸出:
輸出完畢:構(gòu)建有效。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 使用Jenkins配置Git+Maven的自動(dòng)化構(gòu)建的方法
- Asp.net Core Jenkins Docker實(shí)現(xiàn)一鍵化部署的實(shí)現(xiàn)
- 在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法
- jenkins安裝及其配置筆記
- 詳解Docker+Jenkins+Gitlab+Django應(yīng)用部署實(shí)踐
- Jenkins簡介與Docker部署Jenkins的方法
- Jenkins之Log Parse使用方法詳解
- Docker容器使用jenkins部署web項(xiàng)目(總結(jié))
- 詳解jenkins自動(dòng)部署springboot應(yīng)用的方法
- jenkins中通過Publish Over SSH插件將項(xiàng)目部署到遠(yuǎn)程機(jī)器上的講解說明
相關(guān)文章
使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問及遇到的坑
MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的,今天通過本文給大家介紹使用Docker容器部署MongoDB并支持遠(yuǎn)程訪問及遇到的坑,感興趣的朋友一起看看吧2022-07-07docker倉庫登錄及配置insecure-registries的方法
這篇文章主要介紹了docker倉庫登錄配置insecure-registries的方法,docker客戶端如果配置中添加了insecure-registary配置,就不需要在docker 客戶端配置上對應(yīng)證書,如果不配置要在/etc/docker/certs.d/目錄中添加對應(yīng)證書才能正常登錄,感興趣的朋友跟隨小編一起看看吧2022-07-07docker容器自動(dòng)退出重啟報(bào)錯(cuò)問題及解決
這篇文章主要介紹了docker容器自動(dòng)退出重啟報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07使用minikube安裝k8s單節(jié)點(diǎn)集群方式
本文主要介紹了minikube的使用方法,包括安裝、啟動(dòng)、鏡像管理等步驟,minikube是一個(gè)專注于讓Kubernetes更易于學(xué)習(xí)和開發(fā)的本地Kubernetes環(huán)境,支持在macOS、Linux和Windows上快速設(shè)置本地Kubernetes集群2024-10-10Docker之修改/etc/default/docker 里的DOCKER_OPTS參數(shù)不生效問題
這篇文章主要介紹了Docker之修改/etc/default/docker 里的DOCKER_OPTS參數(shù)不生效問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09關(guān)于構(gòu)建aarch64環(huán)境Mysql8.0的Docker鏡像問題
這篇文章主要介紹了構(gòu)建aarch64環(huán)境Mysql8.0的Docker鏡像,需要的朋友可以參考下2022-04-04Docker部署MySQL并實(shí)現(xiàn)客戶端連接
這篇文章介紹了Docker部署MySQL并實(shí)現(xiàn)客戶端連接的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01Docker安裝方法與Docker四種網(wǎng)絡(luò)模式詳解
今天小編就為大家分享一篇關(guān)于Docker安裝方法與Docker四種網(wǎng)絡(luò)模式的詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-09-09