天天看點

基于kubernetes CI/CD實踐

基于K8s建立靜态節點

基于kubernetes CI/CD實踐

 env部分是Jenkins的位址和secret。

基于kubernetes CI/CD實踐

這個Jenkins agent其實有一個服務啟動腳本,然後去讀這些參數。在這個pod裡面預設是沒有mvn建構工具的,這就需要我們去建構鏡像,将常用的工具添加到鏡像當中,然後agent使用這個鏡像就可以了。

基于kubernetes CI/CD實踐

動态建立節點

基于kubernetes CI/CD實踐

實作的思路就是先去k8s裡面建立一個pod, 然後我再運作pipeline,運作完之後調用k8s的api去delete将這個pod删除掉。

實作這個功能可以使用上面的插件,主要依賴于幾個插件,一個是kubernetes插件,還有一個是憑據的插件,還有一個依賴于kubernetes的api其實也包含在Kubernetes插件裡面的。

不要去過度的依賴插件,你隻顧着安裝,在更新Jenkins的時候就痛苦,導緻更新之後Jenkins起不來了。

如何避免這樣的問題,在使用groovy寫的時候可以通過共享庫來減少對插件的依賴。

是以避免使用插件,隻需要安裝核心插件就行了,其他的都是寫groovy的共享庫來實作,比如調用原生的api來實作。

基于kubernetes CI/CD實踐

這個名稱可以随便定義,這個後面會用到。憑據這裡是kube-config檔案加到了這裡

基于kubernetes CI/CD實踐

這個類型是檔案的類型,檔案就是kube-config這個檔案,上傳完之後連接配接測試就行了。

基于kubernetes CI/CD實踐

可以看到agent這裡發生了變化,這裡添加了kubernetes

基于kubernetes CI/CD實踐

cloud字段要和我們在插件裡面配置的字段保持一緻,現在鏡像裡面是沒有mvn工具的,要進行代碼掃描和docker鏡像的建構,這個時候就需要我們自己去建構鏡像了,或者多個container。

基于kubernetes CI/CD實踐

ci這塊,我們輸入版本分支,幫我們去下載下傳代碼,然後運作我們的建構,然後單元測試和代碼掃描,因為是基于kubernetes做傳遞的,是以這裡會有建構鏡像的步驟,鏡像是分支名稱加commit-id來命名的。

cd使用的helm來部署的,在企業裡面都是會自己去開放chart,這個倉庫裡面存放的就是chart,ci之後更新chart裡面values.yaml檔案,然後通過helm去部署,如果出現了問題立刻去復原。

上面是自動的更新yaml檔案,gitops裡面推崇的是将環境的配置資訊都納入到版本控制系統裡面來進行管理,這樣對環境的變更都會留下曆史記錄,很友善去回顧。

我們代碼庫裡面存放的是業務的代碼還有我們的chart。

基于kubernetes CI/CD實踐

先加載共享庫,第一個容器是jnlp容器,也即是agent,其次就是mvn建構的容器,還有docker建構,因為很多版本都是使用了containerd去作為容器運作時,是以裡面是沒法使用docker的,是以需要使用dind去建構鏡像,然後使用docker,還有curl容器和helm部署的容器。

基于kubernetes CI/CD實踐

下載下傳代碼

基于kubernetes CI/CD實踐

 這裡做了優化,将項目的資訊改為commit-id,這裡也會加一些描述資訊。

基于kubernetes CI/CD實踐

這裡面就是下面的代碼部分。 

基于kubernetes CI/CD實踐

 build部分是在jnlp容器裡面運作的,就是jenkins agent容器裡面運作的,下面是在container裡面去運作的,

基于kubernetes CI/CD實踐
基于kubernetes CI/CD實踐

 mvn的配置檔案已經放在共享庫裡面了,那麼就可以去共享庫裡面拿到檔案的内容,然後寫到本地, 也就是将檔案從共享庫裡面拿下來了,然後通過mvn指令指定配置檔案。(這裡還涉及到m2的緩存)

基于kubernetes CI/CD實踐

上傳制品其實就是将包名稱做了重命名mv,然後将其上傳到了制品庫, 上傳制品其實也就是調用了nexus的api。

基于kubernetes CI/CD實踐
基于kubernetes CI/CD實踐

docker建構鏡像的指令,同時切換容器。涉及到登入資訊都放在憑據裡面,然後通過變量的方式引用這些憑據資訊。

基于kubernetes CI/CD實踐

 最後就是調用gitlab的api去更新檔案。你建構了鏡像後面需要去部署,需要找到chart倉庫裡面,需要去更新values裡面的鏡像資訊,還有tag資訊。

這個步驟是自動去做的。

基于kubernetes CI/CD實踐

cd部分就是下載下傳倉庫,并且helm部署和復原。

基于kubernetes CI/CD實踐

這個下載下傳代碼其實就是下載下傳我們的chart倉庫。

部署的時候就是切換到helm裡面去,然後将k8s資訊存入到本地,然後放到root下面去。