kubernetes下jenkins實戰maven項目編譯構建

關於kubernetes環境的jenkins集羣

在kubernetes環境部署的jenkins集羣,執行任務時會新建pod,任務完成後pod被銷燬,架構以下所示:
在這裏插入圖片描述
在kubernetes搭建jenkins集羣的細節,請參考《Helm部署和體驗jenkins》java

編譯構建maven項目

  • 本文是《kubernetes下的jenkins如何設置maven》的續篇,前面咱們作好了maven相關的設置,如今找一個熱門開源maven項目,建立一個pipeline任務去編譯這個maven項目,而且將結果輸出到宿主機上;
  • 本文選擇了spring-cloud-alibaba用來實戰,這是個父子結構的maven工程

環境信息

  1. kubernetes:1.15
  2. jenkins:2.190.2
  3. maven:3.6.3
  4. 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很快就會被銷燬,這裏只是個參考做用,若是有遠程資源或者數據庫相關的清理操做能夠在此執行;git

  • 點擊底部的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程序員

相關文章
相關標籤/搜索