1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上-創(chuàng)新互聯

資源準備

創(chuàng)新互聯建站長期為上千余家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為昌吉企業(yè)提供專業(yè)的網站建設、成都網站設計,昌吉網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發(fā)。

1. 穩(wěn)定運行的K8S集群一套(沒有可使用Rancher快速部署一個)

2. Jenkins master一臺

3. Jenkins pipeline基礎知識:見   鏈接jenkinspipeline

傳統(tǒng)Jenkins使用中暴露的問題

1. 每個業(yè)務團隊使用的編譯環(huán)境不統(tǒng)一,需要準備大量的slave節(jié)點

2. Slave很多,空閑期(如夜里)資源浪費

3. 雖然Slave很多,但高峰期隊列等待構建任務依然在排隊,資源搶占嚴重

4. 構建任務多,workspace空間不足

5. 性能瓶頸,偶爾有slave節(jié)點內存泄漏問題

將Jenkins的slave節(jié)點部署到K8S的原理

K8S有pod的概念,一個pod內可以有多個container。通過每次構建時創(chuàng)建一個新的pod,掛載一個容器的slave節(jié)點的方式構建。構建后將構建產物及結果報告輸出,并在構建后銷毀pod。

方案的優(yōu)勢

1. 共享k8s集群資源,按需分配資源,不會出現slave機由于資源限制或者executor限制導致的資源搶占,構建任務排隊現象。

2. 空閑期釋放掉在k8s集群上申請的資源 ,其他團隊可以復用該資源。如大數據團隊、AI團隊可以定時在夜里申請k8s資源計算模型,跑spark任務等。

3. 每次構建都是新環(huán)境,內存泄漏等問題不會互相影響,workspace空間不會共享。

4. 可根據業(yè)務需求,靈活的啟用不同環(huán)境的鏡像用于構建。如jdk版本、maven版本、不同語言的編譯環(huán)境等,都可以做到按需創(chuàng)建。

具體步驟

1. Jenkins master下載插件

點擊系統(tǒng)管理 ——> 插件管理,選擇要安裝的插件Kubernetes plugin安裝

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

2. 配置K8S serverapi地址

在 點擊系統(tǒng)管理 ——> 系統(tǒng)設置 ——> Add a new cloud ——> 選擇kubernetes,填寫相關信息

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

為了所有構建步驟由pipeline代碼管理比較靈活,所以這里只配置k8s集群地址,不設置pod模版

3. 創(chuàng)建pipeline任務

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

podTemplate(label: 'jenkins-slave', cloud: 'kubernetes'){

    node('jenkins-slave') {

        stage('git-checkout') {

                sh 'pwd'

        }

    }

}

4. 簡單功能驗證

執(zhí)行流水線,可以看到jenkins master自動在k8s集群上拉起一個slave節(jié)點,并執(zhí)行了stage內的命令

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

5. 準備構建環(huán)境鏡像

因為默認啟動的jenkins slave節(jié)點只具備基礎功能,不具備類似maven這種構建環(huán)境。所以我們需要準備不同語言所需要的攜帶不同構建環(huán)境的鏡像。

可以通過docker search需要對應需求的鏡像

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

也可以自己做鏡像,具體dockerfile寫法參考如下:

https://github.com/jenkinsci/docker-jnlp-slave

6. 編寫構建pipeline

語法參見jenkins語法生成器中podTemplate,可自行生成相關流水線語法

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

7.收集構建過程數據

由于構建環(huán)境鏡像在job執(zhí)行成功后會被銷毀,所以收集過程中的數據成為這種方案中最關鍵的一個步驟。下述三個點是我們一定需要收集的信息:

l   構建產物

所有構建產物應該交給制品庫統(tǒng)一管理,pod中的slave節(jié)點機構建后即可將制品傳輸到制品庫中,完成后pod銷毀

l   構建環(huán)境變量

由于構建環(huán)境已經銷毀,所以需要通過統(tǒng)一平臺管理每次構建時對應的構建環(huán)境,如jdk版本,maven版本等,所以該環(huán)境最好交由制品庫管理,推薦使用Artifactory記錄構建過程。

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

l   構建元數據

構建過程中會執(zhí)行一些如代碼靜態(tài)掃描,單元測試等,我們把這種結果數據稱之為軟件生命周期的元數據,同樣這些結果會隨著構建環(huán)境的銷毀一起丟失,我們需要通過api收集結果數據,并與本次構建過程或構建產物相關聯。建議使用Artifactory管理構建過程中的元數據。

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

最佳實踐

1.統(tǒng)一管理構建環(huán)境

由運維維護K8S及Jenkins服務穩(wěn)定,并按需求制作攜帶不同構建環(huán)境的jenkins slave鏡像。

2.由持續(xù)集成團隊統(tǒng)一編寫、統(tǒng)一管理pipeline模版,將模版存儲在git倉庫中,并提供詳細說明文檔,指導開發(fā)人員如何調用,如何傳參。

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

3.業(yè)務部門通過jenkins共享庫特性調用git倉庫中的構建模版,傳入所需的構建環(huán)境和源碼路徑以及其他變量進行構建任務設置

1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上

4. 持續(xù)集成團隊需要在構建模版中定義內容收集元數據,收集環(huán)境變量,設置質量關卡,做到讓開發(fā)無感知的情況下,完成所有信息的收集。這樣就可以做到,開發(fā)人員無需學習復雜的groovy語法編寫pipeline;管理人員可以標準化構建流程,并收集所有質量關卡數據,并會寫到統(tǒng)一制品倉庫管理。

當前文章:1分鐘將你的jenkins構建環(huán)境遷移到K8S集群上-創(chuàng)新互聯
文章轉載:http://muchs.cn/article24/cecije.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站設計公司、品牌網站設計企業(yè)網站制作、網站收錄建站公司、外貿建站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

外貿網站制作