1. 程式人生 > >Jenkins | 進階篇 | 基於Maven構建一個Java專案

Jenkins | 進階篇 | 基於Maven構建一個Java專案

                       --昨夜西風凋碧樹,獨上高樓,望盡天涯路

  • 環境準備

硬體準備:

256 MB RAM, 推薦 512MB

10 GB of 硬碟 (用於給Jenkins以及Docker)

  • 執行Jenkins

下面通過docker執行Jenkins:

docker run \
  --rm \
  -u root \
  -p 8888:8080 \
  -v jenkins-data:/var/jenkins_home \            #掛載Jenkins容器中的/var/jenkins_home到宿主機jenkins-data,如果jenkins-data不存在,會自動建立
  -v /var/run/docker.sock:/var/run/docker.sock \ #掛載docker.sock
  -v "$HOME":/home \                             #掛載$Home
  jenkinsci/blueocean

瀏覽器訪問http://ip:8888/會看到需要啟用Jenkins:

初始密碼可以從log中檢視,或者從/var/jenkins_home/secrets/initialAdminPassword檔案中找:

選擇安裝推薦的外掛之後等待外掛安裝完成:

之後註冊賬號,一路儲存:

點選新建任務,建立一個pipeline任務:

編寫Jenkinsfile,這裡有兩種方式:

直接在Jenkons Web UI中編寫:

從SCM中讀取Jenkinsfile,首先要在git中新增Jenkinsfile檔案,之後填寫配置:

兩種方式都可以構建成功:

下面我們在藍海中操作一些步驟:

點選執行:

之後可以進入到本次構建介面檢視資訊:

Build成功之後的介面如下:

點選右上角回到經典頁面

  • 新增test stage

修改配置檔案:

新新增的指令碼執行maven命令來在簡單的java應用程式上執行單元測試。

這個命令還生成一個jUnit xml報告,該報告儲存到目標/surefire-Reports目錄(在Jenkins容器的/var/jenkins_home/workspace/simple-java-maven-app目錄中)。

在Blue Ocean中,結果可以通過管道執行的測試頁面訪問。

POST部分包含這個jUnit步驟的條件確保步驟總是在測試階段完成時執行,而不管階段的結果如何。

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                git 'https://github.com/LUFFY-lucy/simple-java-maven-app'
                sh 'mvn -B -DskipTests clean package'
            }
        }
         stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
    }
}

同理,進入Blue Ocean,點選執行,結果如下:

  • 新增一個交付stage

修改指令碼如下,新加的stage中執行一個交付的指令碼檔案:

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                git 'https://github.com/LUFFY-lucy/simple-java-maven-app'
                sh 'mvn -B -DskipTests clean package'
            }
        }
         stage('Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
        stage('Deliver') { 
            steps {
                sh './jenkins/scripts/deliver.sh' 
            }
        }
    }
}

該shell檔案位於:

執行shell可以保持pipeline程式碼(即jenkinsfile)的整潔。可以將複雜的構建步驟(特別是由2個或更多步驟組成的階段)放入單獨的shell指令碼檔案中。這最終使Pipeline程式碼的維護變得更容易。

進入Blue Ocean,點選執行,之後部署成功:

至此我們已經走完了“構建”、“測試”和“交付”,這是是使用Jenkins中的maven構建更復雜的java應用程式的基礎。

由於Jenkins是非常可擴充套件的,我們可以修改和配置它來處理構建編排和自動化的幾乎任何方面。