jenkins pipeline 流水线

1.流水线发布代码

pipeline {
  //agent any
  agent none
   environment {
    HARBOR_CREDS = credentials('harbor-admin-passwd')
    //BUILD_BAK = $[ ${BUILD_ID} -2 ]
    }
  options {
    //日志会有时间,删除隐形checkout scm语句,禁止并行,流水线超时设置1h
    timestamps()
    //shkipDefaultCheckout()
    //disableConcurrentBuilds()
    timeout(time: 1, unit: 'HOURS')
  }
  parameters{
    string(name: 'BRANCH', defaultValue: 'master', description: '仓库分支')
    string(name: 'HARBOR_HOST', defaultValue: '106.13.23.226:31007', description: 'harbor仓库地址')
    string(name: 'DOCKER_IMAGE', defaultValue: 'pinhui001/java-demo', description: 'docker镜像名')
    choice(name: 'DOCKER_UPDATE', choices: 'False\nTrue', description: '是否更新基础镜像') 
   //string(name: 'APP_NAME', defaultValue: 'pipeline-demo', description: 'k8s中标签名')
    //string(name: 'K8S_NAMESPACE', defaultValue: 'demo', description: 'k8s的namespace名称')
  }

  stages{ 
    stage('拉取代码'){
      agent { node { label 'master'} }
      steps{
        timeout (time:20, unit:"MINUTES"){
          git branch: '${BRANCH}',credentialsId: '50e2c240-ec9d-4ad6-bc34-48ac85a88ac3', url: 'http://106.13.23.226:31001/rocilife/xxl-job-admin.git'
        }
      }
    }

    stage('maven编译'){
      agent { node { label 'master'} }
      steps {
        timeout (time:20, unit:"MINUTES"){
          sh "/usr/local/maven/bin/mvn -Dmaven.test.skip=true clean install"
        }
      }
    }

    stage('代码扫描'){
      agent { node { label 'master'} }
      steps {
        timeout (time:20, unit:"MINUTES"){
          sh "echo 代码扫描"

          //以下注释
          //withSonarQubeEnv('SonarQube'){
          //  sh '''
          //  /usr/local/sonar-scanner/bin-scanner \
          //  && -Dsonar.projectKey=${JOB_NAME} \
          //  && -Dsonar.projectName=${JOB_NAME} \
          //  && -Dsonar.projectVersion=1.0 \
          //  && -Dsonar.sourceEncoding=UTF-8 \
          //  && -Dsonar.language=java \
          //  && -Dsonar.sources=. \
          //  && -Dsonar.java.binaries=. 
          //  '''
          //}
          //script {
          //  //一分钟  
          //  timeout(1) {    
          //      //利用sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail
          //      def qg = waitForQualityGate() 
          //        if (qg.status != 'OK') {
          //          error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
          //      }  
          //  }
          //}
        }
      }
    }
    stage('镜像制作'){
      agent { node { label 'master'} }
      when { expression { return params.DOCKER_UPDATE == 'True' } }
      steps {
        timeout (time:20, unit:"MINUTES"){
          dir(env.WORKSPACE) {
          //unstash 'app'
          sh "docker build -t ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${BUILD_NUMBER} ."
          //sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:$[ ${BUILD_NUMBER} - 1 ]"
          sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
          sh "docker push ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${BUILD_NUMBER}"
          sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${BUILD_NUMBER}"
          echo "config docker iamges" 
          }
        }
      }
    }
    stage ('镜像忽略') {
      agent { node { label 'master'} }
      when { expression { return params.DOCKER_UPDATE == 'False' } }
      steps {
        echo "不需要更新镜像"
      }     
    }
    stage('部署镜像'){
      agent { node { label 'master'} }
      steps{
        timeout (time:20, unit:"MINUTES"){
          sh "ssh -p 31000 172.16.16.5 'docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST} \
          && docker pull ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${BUILD_NUMBER} \
          && docker rm -f pinhui \
          && docker run -d --name pinhui ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${BUILD_NUMBER}'"
        }
      }
    } 
  }
 
  post {
    always {
      script{
        println("always")
      }
    }
    success {
      script {
        currentBuild.description = "构建成功!"
      }
    }
    failure {
      script{
        currentBuild.description = "构建失败!"
      }
    }
    aborted {
      script {
        currentBuild.description  ="构建取消!"
      }
    }
  }
}

 

posted @ 2020-07-21 17:05  sunmmi  阅读(210)  评论(0)    收藏  举报