pipeline {
  agent any

  triggers {
    // 每30分钟检查一下GIT仓库
    pollSCM '*/30 * * * *'
  }

  options {
    // 禁止因Multibranch pipeline index动作触发构建
    overrideIndexTriggers false
    // 禁止并发构建
    disableConcurrentBuilds()
    // 构建结果保留天数10天，最多保留10个
    buildDiscarder logRotator(daysToKeepStr: '30', numToKeepStr: '10')
    // 控制台打出时间戳
    // timestamps()
    // 构建超时设置：15分钟
    timeout(30)
  }

  stages {

    stage('Build & Test') {

      steps {
        withMaven(
          // Jenkins全局工具设置的Maven的名字
          maven: 'Maven3',
          // Jenkins全局工具设置的JDK的名字，有JDK6，JDK7，JDK8可选
          jdk: 'JDK8',
          // 指定maven本地仓库路径为项目working dir下的.local-m2-reop，可以避免因并发构建导致本地仓库混乱的问题
          mavenLocalRepo: '.local-m2-repo'
        ) {
          sh 'mvn clean package -DskipTests -DskipITs'
        }
      }

    }

    stage('Push nexus') {

      when {
        // 只有当前分支是develop时才执行本Stage
        branch 'develop'
        beforeAgent true
      }

      steps {
        withMaven(
          maven: 'Maven3',
          jdk: 'JDK8',
          mavenLocalRepo: '.local-m2-repo',
          // 只是Deploy，因此把所有options都关闭掉（默认是都开启的）
          publisherStrategy: 'EXPLICIT'
        ) {
          sh 'mvn clean package deploy -DskipTests -DskipITs'
        }
      }

    }

    stage ('Push harbor') {

      when {
        branch 'develop'
        beforeAgent true
      }

      steps {
        withMaven(
          maven: 'Maven3',
          jdk: 'JDK8',
          mavenLocalRepo: '.local-m2-repo',
          publisherStrategy: 'EXPLICIT'
        ) {
          sh 'mvn clean package -DskipTests -DskipITs dockerfile:build dockerfile:push'
        }
      }

    }

  }

  post {
    always {
      // 发送邮件到本次change所包含的committer
      emailext recipientProviders: [developers()],
        subject: "Pipeline [${currentBuild.fullDisplayName}] built ${currentBuild.currentResult}",
        body: "More details: ${currentBuild.absoluteUrl}"

    }
    cleanup {
      // 清空workspace，节省Jenkins服务器磁盘空间
      echo 'Cleanup workspace'
      withMaven(maven: 'Maven3', jdk: 'JDK8', mavenLocalRepo: '.local-m2-repo') {
        sh 'mvn clean'
      }

    }
  }
}
