#!groovy
@Library('jenkinslib') _

def build = new org.devops.build()
def color = new org.devops.color()
def systemtime = new org.devops.systemtime()

def String cpu = "${env.cpu}"
def String imagePrefix = "${env.imagePrefix}"
def String buildImage = "${env.buildImage}"

pipeline {
    agent {
        node {
            label 'master'
        }
    }
    options {
        disableConcurrentBuilds()
        buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20')
    }

    //设定2个参数,根据项目类型不同,修改对应的description name value visibleItemCount  defaultValue 即可
    parameters {
        choice choices: ['false', 'true'], description: '是否需要打镜像包,默认为否', name: 'buildImage'
        extendedChoice description: '只有在需要打镜像包的情况下,才需要选择CPU架构。可单选/多选/全选', multiSelectDelimiter: ',', name: 'cpu',
                quoteValue: true,
                saveJSONParameterToFile: false,
                type: 'PT_CHECKBOX',
                value: 'x86,arm64',
                visibleItemCount: 5
        // 需修改对应的镜像名称
        string defaultValue: 'bus.ga/jzywb/dcuc/', description: '只有在需要打镜像包的情况下,才需要填写要打镜像通用前缀名称,注意最后面要加 / ', name: 'imagePrefix', trim: false
    }
    stages {
        stage('MAVEN-BUILD') {
            steps {
                script {
                    color.PrintMes('执行mvn打包', 'green')
                    //使用mvn方法打包,并传入打包参数.根据实际情况修改打包策略
                    build.Build('mvn', 'mvn clean deploy -DskipTests=true', 'master')
                }
            }
            post {
                success {
                    script {
                        version = build.GetMvnParentVersion()
                        systime = systemtime.GetSysTime('yyMMdd')
                        //将打出来的tar包,按照命名规范命名。根据实际情况,修改对应的系统简称和区域标识(DCUC-CODER-SERVICE-TJDSJ)
                        sh """cd dcuc-coder-service/target
                            cp dcuc-coder-service-*.tar.gz DCUC-CODER-SERVICE-TJDSJ-${version}-${env.GIT_COMMIT.take(8)}-BETA-${systime}.tar.gz
                        """
                        //将复制的按照命名规范的tar包提取到Jenkins的面板,方便下载。根据实际情况,修改对应的系统简称和区域标识(DCUC-CODER-SERVICE-TJDSJ)
                        archiveArtifacts artifacts: 'dcuc-coder-service/target/DCUC-CODER-SERVICE-TJDSJ-*.tar.gz'
                    }
                }
            }

        }
        stage('DOCKER-BUILD') {
            when {
                expression {
                    return (buildImage  == 'true')
                }
            }
            steps {
                script {
                    //将cpu架构和模块名称传入方法打镜像包.若在上面定义的参数名称没变,可不修改
                    build.BuildImage("${cpu}")
                }
            }
        }
    }
    //构建后的操作,用来显示结果.所有项目都适用,可不改
    post {
        success {
            wrap([$class: 'BuildUser']) {
                script {
                    currentBuild.description = "Start By ${env.BUILD_USER} And Build Success"
                }
            }
        }
        failure {
            wrap([$class: 'BuildUser']) {
                script {
                    currentBuild.description = "Start By ${env.BUILD_USER} And Build Failure"
                }
            }
        }
        unstable {
            wrap([$class: 'BuildUser']) {
                script {
                    currentBuild.description = "Start By ${env.BUILD_USER} And Build Unstable"
                }
            }
        }
    }
}