在kubernetes環境部署的jenkins集羣,執行任務時會新建pod,任務完成後pod被銷燬,架構以下所示:
在kubernetes搭建jenkins集羣的細節,請參考《Helm部署和體驗jenkins》java
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很快就會被銷燬,這裏只是個參考做用,若是有遠程資源或者數據庫相關的清理操做能夠在此執行;git