From d4202bec94874ebcabf47e6e8e7ba8d1308e14b2 Mon Sep 17 00:00:00 2001 From: zhouxiunai <154707516@qq.com> Date: Sun, 28 Apr 2019 14:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9E=84=E5=BB=BA=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E3=80=82=E5=8A=A8=E6=80=81=E8=8E=B7=E5=8F=96pom?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E9=A1=B9=E7=9B=AE=E4=BF=A1=E6=81=AF=E5=8F=8A?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jenkins/Jenkinsfile | 162 +++++++++++++++++++++++++++----------------- 1 file changed, 98 insertions(+), 64 deletions(-) diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index 38b56237..7ca5f605 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -1,68 +1,102 @@ -node { - def mailto="154707516@qq.com" //邮件接收人员列表 - def containerName="msgexchangeapi" //容器名称 - def imageVersion="0.8.1-SNAPSHOT" - def imageName="130.120.3.193/com.gzzn.omms/msgexchange-api:${imageVersion}" //镜像名称 - def credentialsId="e41b57a4-436a-4617-817c-9e3f25a8a47f" //ssh证书id - def deployHost="130.120.3.231" //发布到的主机 - def export=95 //暴露端口 - - 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 +/* +* 依赖插件: +* SSH Pipeline Steps +* Pipeline Utility Steps +* +*/ - 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 ${export}:8080 --name ${containerName} ${imageName}",sudo: true - } - } - } //end docker +pipeline { + agent any - //发送成功邮件 - 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']] - ) + 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="msgexchangeapi" + export=95 + + GROUP = readMavenPom().getGroupId() + ARTIFACTID = readMavenPom().getArtifactId() + VERSION = readMavenPom().getVersion() + PACKAGING = readMavenPom(). getPackaging() } - 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 + + 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: false ,failOnError: false) + sshCommand(remote: [ name: "${env.deployName}" ,host: "${env.deployHost}" ,allowAnyHosts: true,user: "${userName}",identityFile: "${kfIdentity}" ] , + command: "docker rm ${env.containerName}",sudo: false ,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: false ,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: false ,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