Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線

Jenkins中文社群發表於2019-04-10

轉自 Jenkins 中文社群:mp.weixin.qq.com/s/RR39ESgZ2…

Docker 已經非常出名並且更多的組織正在轉向基於 Docker 的應用開發和部署。這裡有一個關於如何容器化現有 Java Web 應用以及使用 Jenkins 為它建立一個端到端部署流水線的快速指南。

為此我使用了非常著名的基於 Spring 的寵物商店應用,它代表了一個很好的示例,因為大多數應用都遵循類似的體系結構。

步驟

  1. 構建寵物商店應用。
  2. 執行一次 Sonar 質量檢查。
  3. 使用該 Web 應用準備 Docker 映象。
  4. 執行容器以及執行整合測試。
  5. 如果所有測試成功,推送該映象到一個 dockerhub 賬戶。

所有的程式碼都在這裡

這裡是可用於以上步驟的 Jenkins 流水線程式碼:

Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線

node {
    stage 'checkout'
    git 'https://gitlab.com/RavisankarCts/hello-world.git'
    stage 'build'
    sh 'mvn clean install'
    stage('Results - 1') {
         junit '**/target/surefire-reports/TEST-*.xml'
         archive 'target/*.jar'
        }
    stage 'bake image'
    docker.withRegistry('https://registry.hub.docker.com','docker-hub-credentials') {
        def image = docker.build("ravisankar/ravisankardevops:${env.BUILD_TAG}",'.')
        stage 'test image'
        image.withRun('-p 8888:8888') {springboot ->
        sh 'while ! httping -qc1 http://localhost:8888/info; do sleep 1; done'
        git 'https://github.com/RavisankarCts/petclinicacceptance.git'
        sh 'mvn clean verify'
        }
        stage('Results') {
         junit '**/target/surefire-reports/TEST-*.xml'
         archive 'target/*.jar'
        }
        stage 'push image'
        image.push()
    }
}
複製程式碼

最初的步驟只是檢出程式碼並執行構建。有趣的部分從這個步驟開始,它使用 dockerhub 憑證在 Docker 上下文中執行。

step 3 'bake image'
docker.withRegistry('https://registry.hub.docker.com','docker-hub-credentials')
複製程式碼

Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線

這個步驟構建 Docker 映象。Docker build 命令將 dockerhub 倉庫名稱和 tag 名稱作為一個引數,而構建位置作為另一個引數。

def image = docker.build("dockerhub registry name":"tag name",'location of docker file')
def image = docker.build("ravisankar/ravisankardevops:${env.BUILD_TAG}",'.')
複製程式碼

這裡使用 Dockerfile 來構建 Docker 映象。 Dockerfile 的內容如下:

FROM tomcat:8
ADD target/*.war /usr/local/tomcat/webapps
複製程式碼

下一步是執行映象並執行測試:

stage 'test image'
        image.withRun('-p 8888:8888') { springboot ->
        sh 'while ! httping -qc1 http://localhost:8888/info; do sleep 1; done'
        git 'https://github.com/RavisankarCts/petclinicacceptance.git'
        sh 'mvn clean verify'
}
複製程式碼

withRun 步驟用來幫你執行你剛才構建的 Docker 映象並暴露應用可以暴露的埠。我有另一個測試程式碼庫,它被構建和執行,將對正在執行的映象執行測試。

最後一步是推送該映象到一個 dockerhub registry 或者你的組織建立的任何內部 registry 。

Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線

stage('Results') {
         junit '**/target/surefire-reports/TEST-*.xml'
         archive 'target/*.jar'
        }
        stage 'push image'
        image.push()
複製程式碼

Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線

譯者:王冬輝

相關文章