使用CCE集群安裝部署Jenkins
Jenkins是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具,屬于DevOps一環(huán),主要用于持續(xù)、自動的構(gòu)建/測試軟件項(xiàng)目、監(jiān)控外部任務(wù)的運(yùn)行。
Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運(yùn)行,也可獨(dú)立運(yùn)行。通常與版本管理工具(SCM)、構(gòu)建工具結(jié)合使用。Jenkins可以很好的支持各種語言的項(xiàng)目構(gòu)建,也完全兼容Maven、Ant、Gradle等多種第三方構(gòu)建工具,同時跟SVN、GIT等常用的版本控制工具無縫集成,也支持直接對接GitHub等源代碼托管網(wǎng)站。
方案架構(gòu)
Jenkins部署分為以下兩種模式:
- 一種是直接使用單Master安裝Jenkins,直接進(jìn)行任務(wù)管理和業(yè)務(wù)構(gòu)建發(fā)布,但可能存在一定的生產(chǎn)安全風(fēng)險。
- 一種是Master加Agent模式。Master節(jié)點(diǎn)主要是處理調(diào)度構(gòu)建作業(yè),把構(gòu)建分發(fā)到Agent實(shí)際執(zhí)行,監(jiān)視Agent的狀態(tài)。業(yè)務(wù)構(gòu)建發(fā)布的工作交給Agent進(jìn)行,即執(zhí)行Master分配的任務(wù),并返回任務(wù)的進(jìn)度和結(jié)果。
本實(shí)踐采用Master加Agent模式,Master和Agent均為容器化安裝的方案,并使用在K8s集群實(shí)現(xiàn)動態(tài)Agent。
- Jenkins Master負(fù)責(zé)管理任務(wù)(Job),為了能夠利用Kubernetes平臺上的資源,需要在Master上安裝Kubernetes的插件。
- Kubernetes平臺負(fù)責(zé)產(chǎn)生Pod,用作Jenkins Agent執(zhí)行Job任務(wù)。當(dāng)Jenkins Master上有Job被調(diào)度時,Jenkins Master通過Kubernetes插件向Kubernetes平臺發(fā)起請求,請Kubernetes根據(jù)Pod模板產(chǎn)生對應(yīng)的Pod對象,Pod對象會向Jenkins Master發(fā)起請求,Master連接成功后,就可以在Pod上面執(zhí)行Job了。

Jenkins Master安裝部署
Jenkins Master采用容器化安裝的方案,負(fù)責(zé)管理任務(wù)(Job)。在CCE集群中創(chuàng)建Jenkins工作負(fù)載,并通過負(fù)載均衡的方式進(jìn)行訪問。完成初始配置后,即可進(jìn)入Jenkins頁面。

Jenkins Agent配置
Jenkins可以在集群中創(chuàng)建固定Agent,也可以使用pipeline與CCE的對接,動態(tài)提供容器化的Agent。其中動態(tài)Agent還需要使用Kubernetes相關(guān)插件配置集群認(rèn)證信息及用戶權(quán)限。
- 固定Agent:Agent容器一直運(yùn)行,任務(wù)構(gòu)建完成后不會銷毀,創(chuàng)建完成后將一直占用集群資源,配置過程較簡單。
- 動態(tài)Agent:構(gòu)建任務(wù)時動態(tài)創(chuàng)建Agent容器,并在任務(wù)構(gòu)建完成后銷毀容器,可實(shí)現(xiàn)資源動態(tài)分配,資源利用率高,但是配置過程較為復(fù)雜。

使用Jenkins構(gòu)建流水線
Jenkins流水線與SWR對接,在Agent中調(diào)用docker build/login/push相關(guān)的命令,實(shí)現(xiàn)自動化的容器鏡像打包、推送。
您也可以通過流水線實(shí)現(xiàn)Kubernetes資源(deployment/service/ingress/job等)的部署、升級等能力。
