From dd26709ef083c64922929e0f188af8df9a5a2497 Mon Sep 17 00:00:00 2001 From: zhouxiunai <154707516@qq.com> Date: Sun, 28 Apr 2019 17:34:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9E=84=E5=BB=BA=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=EF=BC=8C=E5=8A=A8=E6=80=81pom=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E5=8F=8A=E7=89=88=E6=9C=AC=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jenkins/Jenkinsfile | 165 +++++++++++++++++++++++++++----------------- 1 file changed, 101 insertions(+), 64 deletions(-) diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index c2b0132..5d60b5f 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -1,65 +1,102 @@ -node { - def mailto="601470458@qq.com,505127606@qq.com,154707516@qq.com,444949396@qq.com,714943302@qq.com" //邮件接收人员列表 - def containerName="adminapi" //容器名称 - def imageName="130.120.3.193/com.gzzn.omms/admin-api:1.2.0-SNAPSHOT" //镜像名称 - def credentialsId="e41b57a4-436a-4617-817c-9e3f25a8a47f" //ssh证书id - def deployHost="130.120.3.231" //发布到的主机 - - try { - checkout scm - docker.image('maven:3-alpine').inside('-v /root/.m2:/root/.m2') { - stage('build'){ - sh 'mvn clean package dockerfile:build dockerfile:push -Dmaven.test.skip=true' - } - - stage('deploy'){ - def remote = [:] - remote.name = "airport-dev" - remote.host = "${deployHost}" - remote.allowAnyHosts = true - - withCredentials([sshUserPrivateKey(credentialsId: "${credentialsId}", keyFileVariable: 'kfIdentity', passphraseVariable: 'pVariable', usernameVariable: 'userName')]) { - remote.user = userName - remote.identityFile = kfIdentity - - sshCommand remote: remote, command: "docker stop ${containerName}",sudo: true ,failOnError: false - sshCommand remote: remote, command: "docker rm ${containerName}",sudo: true ,failOnError: false - sshCommand remote: remote, command: "docker rmi ${imageName}",sudo: true ,failOnError: false - sshCommand remote: remote, command: "docker run -d -p 92:8080 --name ${containerName} ${imageName}",sudo: true - } - } - }//end docker - - //发送成功邮件 - emailext ( - subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 更新正常", - body: """ - 详情: - SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' - 状态:${env.JOB_NAME} jenkins 更新运行正常 - URL :${env.BUILD_URL} - 项目名称 :${env.JOB_NAME} - 项目更新进度:${env.BUILD_NUMBER} - """, - to: "${mailto}", - recipientProviders: [[$class: 'DevelopersRecipientProvider']] - ) - } - catch(e) - { - emailext ( - subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 更新失败", - body: """ - 详情: - FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' - 状态:${env.JOB_NAME} jenkins 运行失败 - URL :${env.BUILD_URL} - 项目名称 :${env.JOB_NAME} - 项目更新进度:${env.BUILD_NUMBER} - """, - to: "${mailto}", - recipientProviders: [[$class: 'DevelopersRecipientProvider']] - ) - throw e - }//end catch +/* +* 依赖插件: +* SSH Pipeline Steps +* Pipeline Utility Steps +* +*/ + +pipeline { + agent any + + environment { + credentialsId = 'e41b57a4-436a-4617-817c-9e3f25a8a47f' + deployName = 'airport-dev' + deployHost = '130.120.3.231' + mailto = '154707516@qq.com' + dockerProtocol = "http" + dockerRegistry = '130.120.3.193' + containerName="adminapi" + export=92 + + GROUP = readMavenPom().getGroupId() + ARTIFACTID = readMavenPom().getArtifactId() + VERSION = readMavenPom().getVersion() + PACKAGING = readMavenPom(). getPackaging() + } + + stages { + stage('maven build') { + agent { + docker { + image 'maven:3-alpine' + args '-v /root/.m2:/root/.m2' + reuseNode true + } + } + steps { + sh 'mvn clean package -Dmaven.test.skip=true' + } + } + + stage('docker build And Push'){ + steps { + script{ + docker.withRegistry("${env.dockerProtocol}://${env.dockerRegistry}", 'privateDockerId') { + docker.build("${env.dockerRegistry}/${env.GROUP}/${env.ARTIFACTID}:${env.VERSION}","--no-cache --build-arg JAR_FILE=target/${env.ARTIFACTID}-${env.VERSION}.${env.PACKAGING} .").push() + } + } + } + } + + + stage('deploy') { + steps { + withCredentials([sshUserPrivateKey(credentialsId: "${env.credentialsId}", keyFileVariable: 'kfIdentity', passphraseVariable: 'pVariable', usernameVariable: 'userName')]) { + sshCommand(remote: [ name: "${env.deployName}" ,host: "${env.deployHost}" ,allowAnyHosts: true,user: "${userName}",identityFile: "${kfIdentity}" ] , + command: "docker stop ${env.containerName}",sudo: true ,failOnError: false) + sshCommand(remote: [ name: "${env.deployName}" ,host: "${env.deployHost}" ,allowAnyHosts: true,user: "${userName}",identityFile: "${kfIdentity}" ] , + command: "docker rm ${env.containerName}",sudo: true ,failOnError: false) + sshCommand(remote: [ name: "${env.deployName}" ,host: "${env.deployHost}" ,allowAnyHosts: true,user: "${userName}",identityFile: "${kfIdentity}" ] , + command: "docker rmi ${env.dockerRegistry}/${env.GROUP}/${env.ARTIFACTID}:${env.VERSION}",sudo: true ,failOnError: false) + sshCommand(remote: [ name: "${env.deployName}" ,host: "${env.deployHost}" ,allowAnyHosts: true,user: "${userName}",identityFile: "${kfIdentity}" ] , + command: "docker run -d -p ${env.export}:8080 --name ${env.containerName} ${env.dockerRegistry}/${env.GROUP}/${env.ARTIFACTID}:${env.VERSION}",sudo: true ,failOnError: true) + } + } + } + } + + + post { + success { + emailext ( + subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 更新正常", + body: """ + 详情: + SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' + 状态:${env.JOB_NAME} jenkins 更新运行正常 + URL :${env.BUILD_URL} + 项目名称 :${env.JOB_NAME} + 项目更新进度:${env.BUILD_NUMBER} + """, + to: "${env.mailto}", + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + + failure { + emailext ( + subject: "'${env.JOB_NAME} [${env.BUILD_NUMBER}]' 更新失败", + body: """ + 详情: + FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' + 状态:${env.JOB_NAME} jenkins 运行失败 + URL :${env.BUILD_URL} + 项目名称 :${env.JOB_NAME} + 项目更新进度:${env.BUILD_NUMBER} + """, + to: "${env.mailto}", + recipientProviders: [[$class: 'DevelopersRecipientProvider']] + ) + } + } } \ No newline at end of file