/*
* 依赖插件:
*  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="msgexchangeapi"
    export=95
    
    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']]
	                )
        }
    }
}