1分鐘將你的jenkins構建環境遷移到K8S叢集上
資源準備
1. 穩定執行的K8S叢集一套(沒有可使用Rancher快速部署一個)
2. Jenkins master一臺
3. Jenkins pipeline基礎知識:見 連結jenkinspipeline
傳統Jenkins使用中暴露的問題
1. 每個業務團隊使用的編譯環境不統一,需要準備大量的slave節點
2. Slave很多,空閒期(如夜裡)資源浪費
3. 雖然Slave很多,但高峰期佇列等待構建任務依然在排隊,資源搶佔嚴重
4. 構建任務多,workspace空間不足
5. 效能瓶頸,偶爾有slave節點記憶體洩漏問題
將Jenkins的slave節點部署到K8S的原理
K8S有pod的概念,一個pod內可以有多個container。透過每次構建時建立一個新的pod,掛載一個容器的slave節點的方式構建。構建後將構建產物及結果報告輸出,並在構建後銷燬pod。
方案的優勢
1. 共享k8s叢集資源,按需分配資源,不會出現slave機由於資源限制或者executor限制導致的資源搶佔,構建任務排隊現象。
2. 空閒期釋放掉在k8s叢集上申請的資源 ,其他團隊可以複用該資源。如大資料團隊、AI團隊可以定時在夜裡申請k8s資源計算模型,跑spark任務等。
3. 每次構建都是新環境,記憶體洩漏等問題不會互相影響,workspace空間不會共享。
4. 可根據業務需求,靈活的啟用不同環境的映象用於構建。如jdk版本、maven版本、不同語言的編譯環境等,都可以做到按需建立。
具體步驟
1. Jenkins master下載外掛
點選系統管理 ——> 外掛管理,選擇要安裝的外掛Kubernetes plugin安裝
2. 配置K8S serverapi地址
在 點選系統管理 ——> 系統設定 ——> Add a new cloud ——> 選擇kubernetes,填寫相關資訊
為了所有構建步驟由pipeline程式碼管理比較靈活,所以這裡只配置k8s叢集地址,不設定pod模版
3. 建立pipeline任務
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes'){
node('jenkins-slave') {
stage('git-checkout') {
sh 'pwd'
}
}
}
4. 簡單功能驗證
執行流水線,可以看到jenkins master自動在k8s叢集上拉起一個slave節點,並執行了stage內的命令
5. 準備構建環境映象
因為預設啟動的jenkins slave節點只具備基礎功能,不具備類似maven這種構建環境。所以我們需要準備不同語言所需要的攜帶不同構建環境的映象。
可以透過docker search需要對應需求的映象
也可以自己做映象,具體dockerfile寫法參考如下:
6. 編寫構建pipeline
語法參見jenkins語法生成器中podTemplate,可自行生成相關流水線語法
7.收集構建過程資料
由於構建環境映象在job執行成功後會被銷燬,所以收集過程中的資料成為這種方案中最關鍵的一個步驟。下述三個點是我們一定需要收集的資訊:
l 構建產物
所有構建產物應該交給製品庫統一管理,pod中的slave節點機構建後即可將製品傳輸到製品庫中,完成後pod銷燬
l 構建環境變數
由於構建環境已經銷燬,所以需要透過統一平臺管理每次構建時對應的構建環境,如jdk版本,maven版本等,所以該環境最好交由製品庫管理,推薦使用Artifactory記錄構建過程。
l 構建後設資料
構建過程中會執行一些如程式碼靜態掃描,單元測試等,我們把這種結果資料稱之為軟體生命週期的後設資料,同樣這些結果會隨著構建環境的銷燬一起丟失,我們需要透過api收集結果資料,並與本次構建過程或構建產物相關聯。建議使用Artifactory管理構建過程中的後設資料。
最佳實踐
1.統一管理構建環境
由運維維護K8S及Jenkins服務穩定,並按需求製作攜帶不同構建環境的jenkins slave映象。
2.由持續整合團隊統一編寫、統一管理pipeline模版,將模版儲存在git倉庫中,並提供詳細說明文件,指導開發人員如何呼叫,如何傳參。
3.業務部門透過jenkins共享庫特性呼叫git倉庫中的構建模版,傳入所需的構建環境和原始碼路徑以及其他變數進行構建任務設定
4. 持續整合團隊需要在構建模版中定義內容收集後設資料,收集環境變數,設定質量關卡,做到讓開發無感知的情況下,完成所有資訊的收集。這樣就可以做到,開發人員無需學習複雜的groovy語法編寫pipeline;管理人員可以標準化構建流程,並收集所有質量關卡資料,並會寫到統一製品倉庫管理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69954434/viewspace-2669413/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker構建redis叢集環境DockerRedis
- k8s——搭建叢集環境K8S
- Apache httpd和JBoss構建高可用叢集環境Apachehttpd
- Jenkins +nginx 搭建前端構建環境JenkinsNginx前端
- k8s——叢集環境問題合集K8S
- 一種遷移到體系結構化環境的方案
- 10分鐘搞定讓你困惑的 Jenkins 環境變數Jenkins變數
- 二、雲伺服器環境的構建+Jenkins伺服器Jenkins
- OpenStack 之vmware機器遷移到openstack叢集
- 今晚加通宵,SAP遷移到SAN環境
- Ubuntu上搭建Hadoop叢集環境的步驟UbuntuHadoop
- Glassfish叢集環境的搭建
- Wix如何零停機將將2000個微服務遷移到多叢集Kafka?微服務Kafka
- 容器化|自建 MySQL 叢集遷移到 KubernetesMySql
- Zookeeper 叢集環境搭建
- tableau實戰系列(十七)-如何將 tableau的Server License遷移到新環境中去Server
- redis 叢集構建Redis
- es 5.5.3叢集環境搭建
- 【環境搭建】RocketMQ叢集搭建MQ
- hadoop叢集環境搭建Hadoop
- CentOS 7.9 環境下搭建k8s叢集(一主兩從)CentOSK8S
- Mac 環境下 Redis 叢集的搭建MacRedis
- 為 WebSphere Application Server Community Edition V2.1 構建 WADI 叢集環境WebAPPServerUnity
- 構建你的Office 365開發環境 - IOS版開發環境iOS
- 構建你的Office 365開發環境 - 其他版本開發環境
- 將 Laravel 開發環境由 Homestead 遷移到 Laravel Sail ( Docker ) 完整詳細教程Laravel開發環境AIDocker
- Redis叢集環境搭建實踐Redis
- 12. Redis叢集環境搭建Redis
- HADOOP SPARK 叢集環境搭建HadoopSpark
- Redis叢集環境安裝指南Redis
- 如何分分鐘構建強大又好用的深度學習環境?深度學習
- 我如何將部落格遷移到 Kubernetes(上)
- 快速體驗k8s叢集的測試、開發環境--allinone部署K8S開發環境None
- Mac 環境下 Android 使用 Jenkins 構建自動化打包MacAndroidJenkins
- 在K8S上搭建Redis叢集K8SRedis
- 在Linux上構建JSP環境(轉)LinuxJS
- 【RAC】Oracle RAC叢集環境下日誌檔案結構Oracle
- (原)將Oracle遷移到SQLServerOracleSQLServer