資源準(zhǔn)備
創(chuàng)新互聯(lián)建站長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為昌吉企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),昌吉網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。1. 穩(wěn)定運(yùn)行的K8S集群一套(沒有可使用Rancher快速部署一個(gè))
2. Jenkins master一臺(tái)
3. Jenkins pipeline基礎(chǔ)知識(shí):見 鏈接jenkinspipeline
傳統(tǒng)Jenkins使用中暴露的問題
1. 每個(gè)業(yè)務(wù)團(tuán)隊(duì)使用的編譯環(huán)境不統(tǒng)一,需要準(zhǔn)備大量的slave節(jié)點(diǎn)
2. Slave很多,空閑期(如夜里)資源浪費(fèi)
3. 雖然Slave很多,但高峰期隊(duì)列等待構(gòu)建任務(wù)依然在排隊(duì),資源搶占嚴(yán)重
4. 構(gòu)建任務(wù)多,workspace空間不足
5. 性能瓶頸,偶爾有slave節(jié)點(diǎn)內(nèi)存泄漏問題
將Jenkins的slave節(jié)點(diǎn)部署到K8S的原理
K8S有pod的概念,一個(gè)pod內(nèi)可以有多個(gè)container。通過每次構(gòu)建時(shí)創(chuàng)建一個(gè)新的pod,掛載一個(gè)容器的slave節(jié)點(diǎn)的方式構(gòu)建。構(gòu)建后將構(gòu)建產(chǎn)物及結(jié)果報(bào)告輸出,并在構(gòu)建后銷毀pod。
方案的優(yōu)勢(shì)
1. 共享k8s集群資源,按需分配資源,不會(huì)出現(xiàn)slave機(jī)由于資源限制或者executor限制導(dǎo)致的資源搶占,構(gòu)建任務(wù)排隊(duì)現(xiàn)象。
2. 空閑期釋放掉在k8s集群上申請(qǐng)的資源 ,其他團(tuán)隊(duì)可以復(fù)用該資源。如大數(shù)據(jù)團(tuán)隊(duì)、AI團(tuán)隊(duì)可以定時(shí)在夜里申請(qǐng)k8s資源計(jì)算模型,跑spark任務(wù)等。
3. 每次構(gòu)建都是新環(huán)境,內(nèi)存泄漏等問題不會(huì)互相影響,workspace空間不會(huì)共享。
4. 可根據(jù)業(yè)務(wù)需求,靈活的啟用不同環(huán)境的鏡像用于構(gòu)建。如jdk版本、maven版本、不同語言的編譯環(huán)境等,都可以做到按需創(chuàng)建。
具體步驟
1. Jenkins master下載插件
點(diǎn)擊系統(tǒng)管理 ——> 插件管理,選擇要安裝的插件Kubernetes plugin安裝
2. 配置K8S serverapi地址
在 點(diǎn)擊系統(tǒng)管理 ——> 系統(tǒng)設(shè)置 ——> Add a new cloud ——> 選擇kubernetes,填寫相關(guān)信息
為了所有構(gòu)建步驟由pipeline代碼管理比較靈活,所以這里只配置k8s集群地址,不設(shè)置pod模版
3. 創(chuàng)建pipeline任務(wù)
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes'){
node('jenkins-slave') {
stage('git-checkout') {
sh 'pwd'
}
}
}
4. 簡(jiǎn)單功能驗(yàn)證
執(zhí)行流水線,可以看到j(luò)enkins master自動(dòng)在k8s集群上拉起一個(gè)slave節(jié)點(diǎn),并執(zhí)行了stage內(nèi)的命令
5. 準(zhǔn)備構(gòu)建環(huán)境鏡像
因?yàn)槟J(rèn)啟動(dòng)的jenkins slave節(jié)點(diǎn)只具備基礎(chǔ)功能,不具備類似maven這種構(gòu)建環(huán)境。所以我們需要準(zhǔn)備不同語言所需要的攜帶不同構(gòu)建環(huán)境的鏡像。
可以通過docker search需要對(duì)應(yīng)需求的鏡像
也可以自己做鏡像,具體dockerfile寫法參考如下:
https://github.com/jenkinsci/docker-jnlp-slave
6. 編寫構(gòu)建pipeline
語法參見jenkins語法生成器中podTemplate,可自行生成相關(guān)流水線語法
7.收集構(gòu)建過程數(shù)據(jù)
由于構(gòu)建環(huán)境鏡像在job執(zhí)行成功后會(huì)被銷毀,所以收集過程中的數(shù)據(jù)成為這種方案中最關(guān)鍵的一個(gè)步驟。下述三個(gè)點(diǎn)是我們一定需要收集的信息:
l 構(gòu)建產(chǎn)物
所有構(gòu)建產(chǎn)物應(yīng)該交給制品庫(kù)統(tǒng)一管理,pod中的slave節(jié)點(diǎn)機(jī)構(gòu)建后即可將制品傳輸?shù)街破穾?kù)中,完成后pod銷毀
l 構(gòu)建環(huán)境變量
由于構(gòu)建環(huán)境已經(jīng)銷毀,所以需要通過統(tǒng)一平臺(tái)管理每次構(gòu)建時(shí)對(duì)應(yīng)的構(gòu)建環(huán)境,如jdk版本,maven版本等,所以該環(huán)境最好交由制品庫(kù)管理,推薦使用Artifactory記錄構(gòu)建過程。
l 構(gòu)建元數(shù)據(jù)
構(gòu)建過程中會(huì)執(zhí)行一些如代碼靜態(tài)掃描,單元測(cè)試等,我們把這種結(jié)果數(shù)據(jù)稱之為軟件生命周期的元數(shù)據(jù),同樣這些結(jié)果會(huì)隨著構(gòu)建環(huán)境的銷毀一起丟失,我們需要通過api收集結(jié)果數(shù)據(jù),并與本次構(gòu)建過程或構(gòu)建產(chǎn)物相關(guān)聯(lián)。建議使用Artifactory管理構(gòu)建過程中的元數(shù)據(jù)。
最佳實(shí)踐
1.統(tǒng)一管理構(gòu)建環(huán)境
由運(yùn)維維護(hù)K8S及Jenkins服務(wù)穩(wěn)定,并按需求制作攜帶不同構(gòu)建環(huán)境的jenkins slave鏡像。
2.由持續(xù)集成團(tuán)隊(duì)統(tǒng)一編寫、統(tǒng)一管理pipeline模版,將模版存儲(chǔ)在git倉(cāng)庫(kù)中,并提供詳細(xì)說明文檔,指導(dǎo)開發(fā)人員如何調(diào)用,如何傳參。
3.業(yè)務(wù)部門通過jenkins共享庫(kù)特性調(diào)用git倉(cāng)庫(kù)中的構(gòu)建模版,傳入所需的構(gòu)建環(huán)境和源碼路徑以及其他變量進(jìn)行構(gòu)建任務(wù)設(shè)置
4. 持續(xù)集成團(tuán)隊(duì)需要在構(gòu)建模版中定義內(nèi)容收集元數(shù)據(jù),收集環(huán)境變量,設(shè)置質(zhì)量關(guān)卡,做到讓開發(fā)無感知的情況下,完成所有信息的收集。這樣就可以做到,開發(fā)人員無需學(xué)習(xí)復(fù)雜的groovy語法編寫pipeline;管理人員可以標(biāo)準(zhǔn)化構(gòu)建流程,并收集所有質(zhì)量關(guān)卡數(shù)據(jù),并會(huì)寫到統(tǒng)一制品倉(cāng)庫(kù)管理。
當(dāng)前文章:1分鐘將你的jenkins構(gòu)建環(huán)境遷移到K8S集群上-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://jinyejixie.com/article24/cecije.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、網(wǎng)站收錄、建站公司、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容