關于kubernetes環境的jenkins集群
在kubernetes環境部署的jenkins集群,執行任務時會新建pod,任務完成后pod被銷毀,架構如下所示:

在kubernetes搭建jenkins集群的細節,請參考《Helm部署和體驗jenkins》
編譯構建maven專案
- 本文是《kubernetes下的jenkins如何設定maven》的續篇,前面我們做好了maven相關的設定,現在找一個熱門開源maven專案,創建一個pipeline任務去編譯這個maven專案,并且將結果輸出到宿主機上;
- 本文選擇了spring-cloud-alibaba用來實戰,這是個父子結構的maven工程
環境資訊
- kubernetes:1.15
- jenkins:2.190.2
- maven:3.6.3
- spring-cloud-alibaba:2.1.1.RELEASE
創建pipeline任務
- 新建任務,點擊下圖紅框:

- 如下,輸入任務名字,然后選擇"流水線":

- 以下是Pipeline腳本:
pipeline {
agent {
label 'my-jenkins-jenkins-slave'
}
tools {
maven 'mvn-3.6.3'
}
stages {
stage('Checkout') {
steps {
echo '從GitHub下載spring-cloud-alibaba工程的原始碼(2.1.1.RELEASE歸檔包)'
sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz'
echo '下載結束,解壓歸檔包'
sh 'tar -zxf v2.1.1.RELEASE.tar.gz'
}
}
stage('Build') {
steps {
echo '開始編譯構建'
sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml'
}
}
stage('Save') {
steps {
echo '將構建結果保存到宿主機'
sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && cp ./*.jar /home/jenkins/jenkins_output/'
echo '傳送完畢'
}
}
stage('Clean') {
steps {
echo '清理Maven工程'
sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
echo '清理完畢'
}
}
}
}
上述腳本有以下幾點需要注意:
a. lable等于my-jenkins-jenkins-slave,這個要和Pod Templates設定中的標簽串列保持一致,如下圖紅框所示:

b. 編譯構建的命令是"mvn clean package -U -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s /home/jenkins/settings/settings.xml",這里面使用了指定位置的settings.xml檔案,該檔案來自configmap的掛載,這樣就用上了自定義的settings.xml,里面可以配置局域網的nexus資訊;
c. 為了縮短編譯構建時間,mvn命令中使用了引數-Dmaven.test.skip=true和-Dmaven.javadoc.skip=true,分別用來跳過單元測驗和jave檔案制作;
d. 構建結果被復制到/home/jenkins/jenkins_output/,這個路徑已經被映射到宿主機的/usr/local/jenkins_output目錄,因為只是演示,所以這里只復制了一個子工程的構建結果;
e. 清理階段的mvn clean其實沒什么意義,因為pod很快就會被銷毀,這里只是個參考作用,如果有遠程資源或者資料庫相關的清理操作可以在此執行;
- 點擊底部的Save保存
執行pipeline任務
- 點擊下圖紅框中的Build Now,即可開始執行任務:

- 如果局域網內部署了Nexus,并且在settings.xml中做了相關設定,只要Nexus中快取過相關的jar,整個任務能在幾分鐘內完成,如下圖:

- 在任務完成之前,執行命令kubectl describe pod xxxxx -n helm-jenkins,以確定pod在哪個宿主機上執行的,待任務結束后,去查看此機器的/usr/local/jenkins_output目錄,可見構建結果已經復制過來了,如下:

- 至此,實戰完成,我們在kubernetes下的jenkins環境中,用pipeline任務成功的編譯構建了開源專案spring-cloud-alibaba的原始碼,并且取得了構建結果,這樣的環境和pipeline做一些定制調整,就可以打造成符合自己要求的CI環境了,希望本文能帶給您一些參考;
歡迎關注我的公眾號:程式員欣宸
https://github.com/zq2599/blog_demos
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151421.html
標籤:Java
