關於k8s環境的jenkins叢集
k8s下搭建了jenkins叢集后,執行任務時會新建pod,任務完成後pod被銷燬,架構如下圖所示:
在k8s搭建jenkins叢集的步驟請參照《》
關於jenkins構建maven
作為java開發者,用jenkins構建maven工程是常見的編譯構建方式,當jenkins部署到kubernetes之上後,要做一些設定才能順利編譯構建;
實戰簡介
本次實戰是在k8s的jenkins環境編譯構建spring-cloud-alibaba這個開源的maven工程,涉及到的環境資訊如下:
- kubernetes:1.15
- jenkins:2.190.2
- maven:3.6.3
- spring-cloud-alibaba:2.1.1.RELEASE
設定maven
如果您已經參考《》一文在kubernetes部署了jenkins,接下來要做的就是設定maven外掛:
- 在設定頁面進入"Global Tool Configuration",如下圖:
- 新建一個Maven配置,如下圖,名為mvn-3.6.3,版本選擇3.6.3
- 點選底部的Save按鈕儲存配置,這樣,在pipeline任務中就能跳過名稱"mvn-3.6.3"使用此maven工具了;
關於maven的settings.xml
區域網內的nexus私有倉庫是經常用到的,作用如下:
- 快取中央倉庫的jar,這樣區域網內的開發者在執行maven工程時,所需jar是從nexus下載的,而不必去中央倉庫下載,可節省下載時間;
- 自己做的二方庫釋出到nexus私有倉庫,給區域網內的其他人使用;
通常是通過配置maven的settings.xml來訪問nexus私有倉庫的,因此,jenkins在構建maven專案時也要用到配置好的settings.xml檔案,才能訪問nexus私有倉庫;
- 如果您想了解更多nexus的細節,請參考文章《》
設定maven的settings.xml
這是本文的重點,思路如下:
- 把settings.xml做成configmap;
- 掛載到執行任務的pod中;
- 執行jenkins的pipeline指令碼中,執行mvn命令時指定使用掛載的settings.xml檔案:
接下來是實現上述思路的操作:
- 準備好settings.xml檔案,裡面已配置好nexus私有倉庫的資訊,主要是server節點和mirror節點,參考下圖:
- 將settings.xml上傳到kubernetes環境,執行以下命令建立名為settings.xml的configmap:
kubectl create configmap settings.xml \
--from-file=settings.xml \
-n helm-jenkins
上述命令有以下兩點需要注意:
a. from-file參數列示此configmap的內容來源,是當前目錄下名為settings.xml的檔案;
b. 此configmap的namespace名為helm-jenkins,這是jenkins所在的namespace;
- 在Configure System頁面,找到Pod Templates的配置,增加一個Config Map Volume,如下圖:
- Config Map名稱填寫settings.xml,掛載路徑是/home/jenkins/settings,如下圖:
- 點選底部的Save按鈕儲存設定;
- 經過了以上設定,執行pipeline任務時,pod的/home/jenkins/settings目錄下就會有settings.xml檔案,您只需指定使用此檔案即可,mvn命令的-s引數就是用來指定settings.xml檔案的,下圖是一段pipeline指令碼,可作為參考:
設定pod記憶體和CPU
執行任務的pod的記憶體如果太小,可能會導致maven或者gradle編譯時報OutOfMemory錯誤,因此需要設定pod記憶體:
- 在Configure System頁面,找到Pod Templates的配置,點選下圖紅框中的Advanced...按鈕:
- 如下圖紅框所示,按照實際需求對CPU和記憶體進行調整,我這裡設定了1G的記憶體:
- 點選底部的Save按鈕儲存設定;
輸出構建結果
mavne工程編譯構建成功後,想要得到構建結果可以有多種途徑,這裡提供一種參考:通過資料卷的方式將構建結果儲存到到宿主機
- 在Configure System頁面,找到Pod Templates的配置,如下圖,新增捲選擇Host Path Volume:
- 如下所示,主機路徑填寫/usr/local/jenkins_output,掛載路徑填寫/home/jenkins/jenkins_output,這樣就把pod的資料夾對映到宿主機上了
- 注意:確保宿主機的/home/jenkins/jenkins_output有寫許可權
經過以上設定,jenkins環境現在可以順利構建maven專案了,下一篇文章,會挑選一個熱門開源專案來實戰編譯構建。