pipeline {
    agent any
    options {
        buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '2', numToKeepStr: '2'))
    }
    stages {
        stage('Setup Parameters & ENV') {
            steps {
                configFileProvider([configFile(fileId: 'Yhzzv3JsonConfig', variable: 'settingsFile')]) {
                    script {
                        def config = readJSON file:"$settingsFile"
                        def jobNameStr = JOB_NAME.tokenize('/') as String[]
                        def jobName = jobNameStr[0]
                        def branchConfig = config."branchConfig"."${env.BRANCH_NAME}"
                        def serviceConfig = config."serviceConfig"."${jobName}"

                        MAVEN_SET = branchConfig.MAVEN_SET
                        registry = branchConfig.registry
                        registryCredential = branchConfig.registryCredential
                        namespace = branchConfig.namespace
                        jenkinsAgent = branchConfig.jenkinsAgent

                        echo "jobName: ${jobName}"
                        echo "The Maven Set XML for the ${env.BRANCH_NAME} branch is: ${MAVEN_SET}"

                        projectName = serviceConfig.projectName
                        packageName = serviceConfig.packageName
                        serverHost01= serviceConfig.serverHost01

                        echo "projectName: ${projectName}"
                        echo "packageName: ${packageName}"
                        echo "serverHost01: ${serverHost01}"

                        if ("${env.BRANCH_NAME}" == "dev") {
                            serverIP01 = branchConfig."${serverHost01}"
                            echo "dev serverIP01: ${serverIP01}"
                            properties([
                                parameters([
                                    string(
                                        defaultValue: 'dev',
                                        description: '编译参数',
                                        name: 'PROFILES',
                                        trim: true
                                    )
                                ])
                            ])
                        } else if ("${env.BRANCH_NAME}" == "test"){
                            serverIP01 = branchConfig."${serverHost01}"
                            echo "test serverIP01: ${serverIP01}"
                            properties([
                                parameters([
                                    string(
                                        defaultValue: 'test',
                                        description: '编译参数',
                                        name: 'PROFILES',
                                        trim: true
                                    )
                                ])
                            ])
                        } else if ("${env.BRANCH_NAME}" == "master") {
                            properties([
                                parameters([
                                    choice (
                                        choices: ['','uat', 'prod'],
                                        description: '编译参数: uat-uat环境，prod-生产环境',
                                        name: 'PROFILES'
                                    )
                                ])
                            ])

                            if ("${PROFILES}" == "uat") {
                                serverIP01 = branchConfig."${PROFILES}"."${serverHost01}"
                                echo "uat serverIP01: ${serverIP01}"
                            } else if ("${PROFILES}" == "prod") {
                                serverIP01 = branchConfig."${PROFILES}"."${serverHost01}"
                                echo "prod serverIP01: ${serverIP01}"
                            } else {
                                error("PROFILES is not uat or prod")
                            }
                        } else {
                            error("Build failed because failed to fetch settings for branch")
                        }
                        echo "The serverIP for the branch: ${env.BRANCH_NAME}, profile: ${PROFILES} is: ${serverIP01}"
                    }
                }

            }
        }
        stage('Build') {
            agent {
                docker {
                    image "lamefox/node:16.20.2-bullseye-dos"
                    label jenkinsAgent
                }
            }
            steps {
                    sh '''
                        npm config set registry https://registry.npmmirror.com
                        npm install rimraf@3.0.2 -g
                        rimraf node_modules/.cache
                        npm config set sass_binary_site https://npmmirror.com/mirrors/node-sass
                        npm install -g node-gyp
                        npm install --unsafe-perm
                        npm run build:$PROFILES
                    '''
            }

        }
        stage("Deploy") {
            options {
                skipDefaultCheckout()
            }
            when {
                expression {
                   return params.PROFILES != "uat"
                }
            }
            agent {
                label {
                    label jenkinsAgent
                }
            }
            steps {
                script {
                    sh 'echo "#### MD5 HASH ####"'
                    sh "ls -lsh; rm -rf ${projectName} ${packageName}; mv dist ${projectName} && tar zcf ${packageName} ${projectName}; md5sum ${packageName}"

                    sh 'echo "#### scp and restart ####"'
                    sh "ssh ${serverIP01} 'cd /data/apps/yhsc/yhzz-nginx/webroot; rm -rf ${projectName}; rm -f ${packageName}'"
                    sh "scp ${packageName} ${serverIP01}:/data/apps/yhsc/yhzz-nginx/webroot"
                    sh "ssh ${serverIP01} 'cd /data/apps/yhsc/yhzz-nginx/webroot; tar zxf ${packageName}; ls -l'"
                }
            }
        }
        stage("Deploy Uat") {
            options {
                skipDefaultCheckout()
            }
            when {
                expression {
                   return params.PROFILES == "uat"
                }
            }
            agent {
                label {
                    label jenkinsAgent
                }
            }
            steps {
                script {
                    sh 'echo "#### MD5 HASH ####"'
                    sh "ls -lsh; rm -rf ${projectName} ${packageName}; mv dist ${projectName} && tar zcf ${packageName} ${projectName}; md5sum ${packageName}"

                    sh 'echo "#### scp and restart ####"'
                    sh "ssh ${serverIP01} 'cd /data/apps/yhsc/yhzz-nginx/webroot; rm -rf ${projectName}; rm -f ${packageName}'"
                    sh "scp ${packageName} ${serverIP01}:/data/apps/yhsc/yhzz-nginx/webroot"
                    sh "ssh ${serverIP01} 'cd /data/apps/yhsc/yhzz-nginx/webroot; tar zxf ${packageName}; ls -l'"
                }
            }
        }
    }
}
