ZIP-Jenkinsfile

pipeline {
    agent {
            label 'node1'
    }
    environment {
    DEV_IP = "10.66.225.38"
    TEST_IP = "10.66.225.38"
    PROD_IP = '10.66.29.113'
    DEPLOY_DIR = "/usr/local/"
    ZIP = "iot-persistence-mysql-web/target/iot-persistence-mysql-web.zip"
    ZIP_NAME = "iot-persistence-mysql-web.zip"
    MAVEN_BUILD_COMMAND = "mvn clean compile package -Dmaven.test.skip=true"
    APP_LOG = "/opt/logs/unicorn-persistence/applog/info.log"
    DEPLOY_COMMAND = "sh /usr/local/deploy_service.sh persistence-phoenix iot-persistence-mysql-web"
    NEXUS_GROUP = "yutongiot"
    NEXUS_NAME1 = "iot-persistence"
    NEXUS_NAME2 = "mysql-web"
    NEXUS_NAME = "iot-persistence-mysql-web"
    EMAILLIST = "wxchenjt@yutong.com"
    }
    options {
        //保持构建的最大个数
        buildDiscarder(logRotator(numToKeepStr: '5')) 
    }
    parameters {
    choice(
        description: '选择部署环境',
        name: 'ENV',
        choices: ['dev','test','prod']
    )
    choice(
      description: '代码库地址',
      name: 'GITURL',
      choices: ['git@dev.yutong.com:yutongiot/iot-persistence-mysql.git']
     )
     string(name: 'GITBRANCH', defaultValue: 'develop-iot-zhuanxiang',description: '构建分支')
    choice(
      description: "V3.*X*是X迭代提测版本根目录,迭代从0起,例如 V3.0",
      name: 'NEXUS_REP',
      choices: ['V3.23','V3.24','V3.25','V3.26']
     )
     
     choice(
      description: "V3.*X*.*Y*是X迭代上线前研发多次提测版本,Y表示第几次提测,例如 V3.0.1表示V3的0迭代第1次提交;      P00*Z*是X迭代上线后研发多次提测补丁,Z表示第几次补丁, P001 表示V3的0迭代第1次补丁;         上线前提测从1起,上线后提测从1起",
      name: 'NEXUS_PATCH',
      choices: ['001','002','003','004','005','006','007','008','009','010','011','012','013','014','015','016','017','P001','P002','P003','P004','P005','P006']
     )
     
    }
    
    stages {
        stage('拉取代码'){
        when {expression {return params.ENV == 'dev'}}
        steps {
        sh "echo code pull"
        git branch: "${GITBRANCH}", credentialsId: '504b230b-c8f8-4fd5-a708-888db3fcd1c8', url: "${GITURL}"
        }
        }
        stage('代码扫描'){
            when {expression {return params.ENV == 'dev'}}
            steps {
             withSonarQubeEnv('sonar') {
             sh "echo SONAR启动 "
             sh "cp /data/build-devops/sonar-project.properties $workspace"
             sh "sed -i 's/jobname/${JOB_NAME}/g' sonar-project.properties"
             sh "/data/sonarqube/bin/sonar-scanner -X -Dsonar.host.url=http://10.66.225.39:9000"
            }
            script {
                timeout(time: 1, unit: "HOURS") {
                def qg = waitForQualityGate()
                if (qg.status != 'OK') {
                error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
                }}}
                
            }
        }
        stage('代码构建'){
            when {expression {return params.ENV == 'dev'}}
            steps {
            sh "echo ${MAVEN_BUILD_COMMAND}"
            sh "${MAVEN_BUILD_COMMAND}"
        }
        }
        stage('拉取部署包'){
            when {expression {return params.ENV == 'test'||params.ENV == 'prod'||params.ENV == 'rollback'}}
            steps {
            script{
            if (params.ENV == "test") {
            sh "rm -rf *.zip"
            sh "cp /data/build-devops/nexus-common/nexus-download-39.sh $workspace"
            sh "sed -i 's#name#${ZIP}#g' nexus-download-39.sh"
            sh "sed -i 's#cangku#${NEXUS_REP}#g' nexus-download-39.sh"
            sh "sed -i 's#group#${NEXUS_GROUP}#g' nexus-download-39.sh"
            sh "sed -i 's#patch#${NEXUS_PATCH}#g' nexus-download-39.sh"
            sh "sed -i 's/one/${NEXUS_NAME1}/g' nexus-download-39.sh"
            sh "sed -i 's/two/${NEXUS_NAME2}/g' nexus-download-39.sh"
            sh "sed -i 's/id/${NEXUS_NAME}/g' nexus-download-39.sh"
            sh "sed -i 's/type/zip/g' nexus-download-39.sh"
            sh "sh nexus-download-39.sh"
            }
            if (params.ENV == "prod") {
            sh "rm -rf *.zip"
            sh "cp /data/build-devops/nexus-common/nexus-download-39.sh $workspace"
            sh "sed -i 's#name#${ZIP}#g' nexus-download-39.sh"
            sh "sed -i 's#cangku#${NEXUS_REP}#g' nexus-download-39.sh"
            sh "sed -i 's#group#${NEXUS_GROUP}#g' nexus-download-39.sh"
            sh "sed -i 's#patch#${NEXUS_PATCH}#g' nexus-download-39.sh"
            sh "sed -i 's/one/${NEXUS_NAME1}/g' nexus-download-39.sh"
            sh "sed -i 's/two/${NEXUS_NAME2}/g' nexus-download-39.sh"
            sh "sed -i 's/id/${NEXUS_NAME}/g' nexus-download-39.sh"
            sh "sed -i 's/type/zip/g' nexus-download-39.sh"
            sh "sh nexus-download-39.sh"
            }
            if (params.ENV == "rollback") {
            sh "rm -rf *.zip"
            sh "cp /data/build-devops/nexus-common/nexus-download-65.sh $workspace"
            sh "sed -i 's#name#${ZIP}#g' nexus-download-65.sh"
            sh "sed -i 's#cangku#${NEXUS_REP}#g' nexus-download-65.sh"
            sh "sed -i 's#group#${NEXUS_GROUP}#g' nexus-download-65.sh"
            sh "sed -i 's#patch#${NEXUS_PATCH}#g' nexus-download-65.sh"
            sh "sed -i 's/one/${NEXUS_NAME1}/g' nexus-download-65.sh"
            sh "sed -i 's/two/${NEXUS_NAME2}/g' nexus-download-65.sh"
            sh "sed -i 's/id/${NEXUS_NAME}/g' nexus-download-65.sh"
            sh "sed -i 's/type/zip/g' nexus-download-65.sh"
            sh "sh nexus-download-65.sh"
            }
        }
            }
        }
        stage('部署服务'){
            when {expression {return params.ENV == 'dev'||params.ENV == 'test'||params.ENV == 'prod'||params.ENV == 'rollback'}}
            steps {
            script {
            
            if (params.ENV == "dev") {
               for (item in DEV_IP.tokenize(',')){
                   echo "deploy ${ENV}" 
                   echo "deploy ${item}"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/${ZIP} ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run '${DEPLOY_COMMAND}'"
                }
            }
            if (params.ENV == "test") {
               for (item in TEST_IP.tokenize(',')){
                   echo "deploy ${ENV}" 
                   echo "deploy ${item}"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/${ZIP_NAME} ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run '${DEPLOY_COMMAND}'"
                }
            }
            if (params.ENV == "prod") {
               for (item in PROD_IP.tokenize(',')){
                   echo "deploy ${ENV}" 
                   echo "deploy ${item}"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/${ZIP_NAME} ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run '${DEPLOY_COMMAND}'"
                }
            }
        }
            }
        }
        
        stage('日志输出'){
            when {expression {return params.ENV == 'dev'||params.ENV == 'test'||params.ENV == 'prod'||params.ENV == 'rollback'}}
            steps {
            script {
            if (params.ENV == "dev") {
               sh "sleep 5s"
               sh "cp /data/build-devops/log_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's#log#${APP_LOG}#g' log_check.sh"
               for (item in DEV_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/log_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/log_check.sh'"
               }
            }
            if (params.ENV == "test") {
               sh "sleep 5s"
               sh "cp /data/build-devops/log_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's#log#${APP_LOG}#g' log_check.sh"
               for (item in TEST_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/log_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/log_check.sh'"
               }
            }
            if (params.ENV == "prod") {
               sh "sleep 5s"
               sh "cp /data/build-devops/log_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's#log#${APP_LOG}#g' log_check.sh"
               for (item in PROD_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/log_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/log_check.sh'"
               }
            }
            }
        }
        }
        stage('服务检查'){
            when {expression {return params.ENV == 'dev'||params.ENV == 'test'||params.ENV == 'prod'||params.ENV == 'rollback'}}
            steps {
            script {
            if (params.ENV == "dev") {
               sh "sleep 5s"
               sh "cp /data/build-devops/service_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's/jarname/${NEXUS_NAME}/g' service_check.sh"
               for (item in DEV_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/service_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/service_check.sh'"
               }
            }
            if (params.ENV == "test") {
               sh "sleep 5s"
               sh "cp /data/build-devops/service_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's/jarname/${NEXUS_NAME}/g' service_check.sh"
               for (item in TEST_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/service_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/service_check.sh'"
               }
            }
            if (params.ENV == "prod") {
               sh "sleep 5s"
               sh "cp /data/build-devops/service_check.sh /data/jenkins_home/workspace/${JOB_NAME}/"
               sh "sed -i 's/jarname/${NEXUS_NAME}/g' service_check.sh"
               for (item in PROD_IP.tokenize(',')){
                   echo "${item}:获取服务最后100行日志"
                   sh "salt ${item} cp.get_file salt://${JOB_NAME}/service_check.sh ${DEPLOY_DIR}"
                   sh "salt ${item} cmd.run 'sh ${DEPLOY_DIR}/service_check.sh'"
               }
            }
            }
            }
        }
        
        stage('上传制品库'){
            when {expression {return params.ENV == 'dev'||params.ENV == 'prod'}}
            steps {
            script {
            if (params.ENV == "dev") {
            input "是否上传测试环境制品库"
            sh "echo ${ZIP}"
            sh "cp /data/build-devops/nexus-common/nexus-upload.sh $workspace"
            sh "sed -i 's#name#${ZIP}#g' nexus-upload.sh"
            sh "sed -i 's#cangku#${NEXUS_REP}#g' nexus-upload.sh"
            sh "sed -i 's#group#${NEXUS_GROUP}#g' nexus-upload.sh"
            sh "sed -i 's#patch#${NEXUS_PATCH}#g' nexus-upload.sh"
            sh "sed -i 's/one/${NEXUS_NAME1}/g' nexus-upload.sh"
            sh "sed -i 's/two/${NEXUS_NAME2}/g' nexus-upload.sh"
            sh "sed -i 's/id/${NEXUS_NAME}/g' nexus-upload.sh"
            sh "sed -i 's/type/zip/g' nexus-upload.sh"
            sh "sh nexus-upload.sh"
            }
            if (params.ENV == "prod") {
            sh "echo ${ZIP_NAME}"
            sh "cp /data/build-devops/nexus-common/nexus-upload-65.sh $workspace"
            sh "sed -i 's#name#${ZIP_NAME}#g' nexus-upload-65.sh"
            sh "sed -i 's#cangku#${NEXUS_REP}#g' nexus-upload-65.sh"
            sh "sed -i 's#group#${NEXUS_GROUP}#g' nexus-upload-65.sh"
            sh "sed -i 's#patch#${NEXUS_PATCH}#g' nexus-upload-65.sh"
            sh "sed -i 's/one/${NEXUS_NAME1}/g' nexus-upload-65.sh"
            sh "sed -i 's/two/${NEXUS_NAME2}/g' nexus-upload-65.sh"
            sh "sed -i 's/id/${NEXUS_NAME}/g' nexus-upload-65.sh"
            sh "sed -i 's/type/zip/g' nexus-upload-65.sh"
            sh "sh nexus-upload-65.sh"
            }
            }
            }
        }
        /*stage('接口测试'){
           steps {
            sh "cp /data/build-devops/autotest/autotest.sh /data/jenkins_home/workspace/${JOB_NAME}/${JOB_NAME}.sh"
            sh "sed -i 's/projectname/${JOB_NAME}/g' ${JOB_NAME}.sh"
            sh "sh ${JOB_NAME}.sh yutong-devops-autotest.json test.postman_environment.json"
             
            script{
               stage('测试报告'){
               publishHTML([
                  allowMissing: false, 
                  alwaysLinkToLastBuild: false, 
                  keepAll: false, 
                  reportDir: 'autotest-reports', 
                  reportFiles: 'yutong-devops-test.html', 
                  reportName: 'HTML Report', 
                  reportTitles: '']) 
                }
            }
         }
        }*/
            
    }
    post{
        always{
            echo "构建结束"
        }
        success {
          echo '恭喜您,构建成功!!!'
			
		  emailext attachLog: true, attachmentsPattern: 'autotest-reports/${JOB_NAME}.html', 
          subject: "'${ENV}环境:${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建成功",
		  body: """
          <div id="content">
          <h1>CI报告</h1>
          <div id="sum2">
	      <h2>构建结果 - <font color="#00FF00">SUCCESS</font></h2>
          <ul>
          <li>项目名称 : <a>${env.JOB_NAME}</a></li>
	      <li>项目 URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
	      <li>构建编号 : 第${BUILD_NUMBER}次构建</li>
          <li>构建日志 :<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
	      <li>代码扫描 :<a href="http://10.66.225.39:9000/dashboard?id=${JOB_NAME}">http://10.66.225.39:9000/dashboard?id=${JOB_NAME}</a></li>
          </ul>
          </div>
          <div id="sum0">
          <h2>制品信息</h2>
          <ul>
          <li>GIT项目的地址 : <a>${GITURL}</a></li>
	      <li>GIT项目当前的分支名 : ${GITBRANCH}</li>
	      <li>制品库地址 : <a href="http://10.66.225.39">http://10.66.225.39</a></li>
	      <li>本次生成制品 :${ZIP}</li>
	      <li>本次提测版本 : ${NEXUS_REP}.${NEXUS_PATCH}</li>
          </ul>
          </div>
          <div id="sum0">
          <h2>运行环境</h2>
          <ul>
	      <li>项目发布的环境    : ${ENV}</li>
	      <li>项目环境访问地址  : ${DEPLOY_DIR} </li>
	      <li>项目运行环境的IP  : Dev: ${DEV_IP}   TEST: ${TEST_IP}  PROD: ${PROD_IP}</li>
          </ul>
          </div>
          </div>""",mimeType: 'text/html',to : "${EMAILLIST}"
		  }
        failure {
            echo '抱歉,构建失败!!!'
			
		  emailext attachLog: true, attachmentsPattern: 'autotest-reports/${JOB_NAME}.html',  
          subject: "'${ENV}环境:${env.JOB_NAME} [${env.BUILD_NUMBER}]' 构建失败",
		  body: """
          <div id="content">
          <h1>CI报告</h1>
          <div id="sum2">
	      <h2>Jenkins构建结果 - <font color="#FF0000">FAILED</font></h2>
          <ul>
          <ul>
          <li>项目名称: <a>${env.JOB_NAME}</a></li>
	      <li>项目 URL: <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
	      <li>构建编号:;第${BUILD_NUMBER}次构建</li>
          <li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
          </ul>
          </ul>
          </div>
          <div id="sum0">
          <h2>制品信息</h2>
          <ul>
          <li>GIT项目的地址 : <a>${GITURL}</a></li>
	      <li>GIT项目当前的分支名 : ${GITBRANCH}</li>
	      <li>制品库地址 : <a href="http://10.66.225.39">http://10.66.225.39</a></li>
	      <li>本次生成制品 :${ZIP}</li>
	      <li>本次提测版本 : ${NEXUS_REP}.${NEXUS_PATCH}</li>
          </ul>
          </div>
          </div>""", mimeType: 'text/html',to : "${EMAILLIST}"
        }
        unstable {
            echo '该任务已经被标记为不稳定任务....'
        }
        changed {
            echo ''
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值