轉自 Jenkins 中文社群:mp.weixin.qq.com/s/RR39ESgZ2…
Docker 已經非常出名並且更多的組織正在轉向基於 Docker 的應用開發和部署。這裡有一個關於如何容器化現有 Java Web 應用以及使用 Jenkins 為它建立一個端到端部署流水線的快速指南。
為此我使用了非常著名的基於 Spring 的寵物商店應用,它代表了一個很好的示例,因為大多數應用都遵循類似的體系結構。
步驟
- 構建寵物商店應用。
- 執行一次 Sonar 質量檢查。
- 使用該 Web 應用準備 Docker 映象。
- 執行容器以及執行整合測試。
- 如果所有測試成功,推送該映象到一個 dockerhub 賬戶。
所有的程式碼都在這裡。
這裡是可用於以上步驟的 Jenkins 流水線程式碼:
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')
複製程式碼
這個步驟構建 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 。
stage('Results') {
junit '**/target/surefire-reports/TEST-*.xml'
archive 'target/*.jar'
}
stage 'push image'
image.push()
複製程式碼
譯者:王冬輝