pipeline {
    agent any

    environment {
        APP_NAME = 'platform'
        SERVER_ADDRESS = ''
        USER = 'appuser'
        PASSWORD = ''
        INSTALL_PATH = '/home/appuser/apphome/apache2/apache'
        APACHE_PATH = '/home/appuser/apphome/apache2/apache'
    }

    parameters {
        choice(name: 'CHOICE', choices: 'UAT\nPROD', description: '请选择一个需要运行的环境')
        choice(name: 'ACTION', choices: 'DEPLOY\nINSTALL\nSTART\nSTOP\nCLEAN', description: '请选择一个需要执行的命令')
        choice(name: 'METHOD', choices: 'ALL\nESCAPE\nSSO', description: '请选择一种方式')
    }

    stages {
        stage('Install') {
            when {
                environment name: 'ACTION', value:'INSTALL'
            }
            steps {
                echo "Start to install..."
                sh 'npm install --registry=https://registry.npm.taobao.org --loglevel info'
                echo "Installation is finished!"
            }
        }

        stage('Deploy - uat') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'DEPLOY'
				environment name: 'METHOD', value:'ALL'

            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.40.164']
                    def servers_sso = ['10.0.99.240','10.0.99.239']
                    def is_sso_build = false
                    def is_normal_build = false
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to create directory..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                if [ -d ${INSTALL_PATH}/${APP_NAME} ]; then
                                    rm -fr ${INSTALL_PATH}/${APP_NAME}
                                fi
                                mkdir -p ${INSTALL_PATH}/${APP_NAME}
                            '
                        """
                        echo "Creating directory is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Prepare to copy the packaged file to the target machine ${servers[i]}."
                        echo "Current path is:"
                        sh "pwd"
                        echo "Starting to copy..."
                        if (servers_sso.contains(servers[i])) {
                           if (!is_sso_build) {
                               echo "Start to SSO build the project..."
                               sh "npm run autobuild_sso"
                               echo "SSO Building is finished!"
                               is_sso_build = true;
                           }
                           sh "sshpass -p ${PASSWORD} scp -r dist_sso/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"
                        }else {
                            if (!is_normal_build) {
                               echo "Start to normally build the project..."
                               sh "npm run build"
                               echo "Normally building is finished!"
                               is_normal_build = true;
                            }
                           sh "sshpass -p ${PASSWORD} scp -r dist/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"
                        }

                        echo "Copying is finished!"
                        echo "#############glaceful delimiter##################"
                        
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Start - uat') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'START'
				environment name: 'METHOD', value:'ALL'


            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.40.164']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Stop - uat') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'STOP'
				environment name: 'METHOD', value:'ALL'

            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.40.164']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }
        
        stage('Deploy - uat - SSO') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'DEPLOY'
                environment name: 'METHOD', value:'SSO'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.240','10.0.99.239']

                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to create directory..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                if [ -d ${INSTALL_PATH}/${APP_NAME} ]; then
                                    rm -fr ${INSTALL_PATH}/${APP_NAME}
                                fi
                                mkdir -p ${INSTALL_PATH}/${APP_NAME}
                            '
                        """
                        echo "Creating directory is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Prepare to copy the packaged file to the target machine ${servers[i]}."
                        echo "Current path is:"
                        sh "pwd"
                        echo "Starting to copy..."
                        echo "Start to SSO build the project..."
                        sh "npm run autobuild_sso"
                        echo "SSO Building is finished!"
                        sh "sshpass -p ${PASSWORD} scp -r dist_sso/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"

                        echo "Copying is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Stop server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "#############glaceful delimiter##################"
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Start - uat - SSO') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'START'
                environment name: 'METHOD', value:'SSO'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.240','10.0.99.239']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Stop - uat - SSO') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'STOP'
                environment name: 'METHOD', value:'SSO'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.240','10.0.99.239']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }
        
        stage('Deploy - uat - ESCAPE') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'DEPLOY'
                environment name: 'METHOD', value:'ESCAPE'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.238']


                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to create directory..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                if [ -d ${INSTALL_PATH}/${APP_NAME} ]; then
                                    rm -fr ${INSTALL_PATH}/${APP_NAME}
                                fi
                                mkdir -p ${INSTALL_PATH}/${APP_NAME}
                            '
                        """
                        echo "Creating directory is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Prepare to copy the packaged file to the target machine ${servers[i]}."
                        echo "Current path is:"
                        sh "pwd"
                        echo "Starting to copy..."
                        echo "Start to normally build the project..."
                        sh "npm run autobuild"
                        echo "Normally building is finished!"
                        sh "sshpass -p ${PASSWORD} scp -r dist/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"

                        echo "Copying is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Stop server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "#############glaceful delimiter##################"
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Start - uat - ESCAPE') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'START'
                environment name: 'METHOD', value:'ESCAPE'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.238']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Stop - uat - ESCAPE') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'STOP'
                environment name: 'METHOD', value:'ESCAPE'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.0.99.238']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Clean - uat') {
            when {
                environment name: 'CHOICE', value:'UAT'
                environment name: 'ACTION', value:'CLEAN'
            }

            environment {
                PASSWORD = credentials('uat-crc-nbform-pass-secret-text')
            }

            steps {
                echo "Start to delete directory..."
                sh """
                    if [ -d node_modules ]; then
                        rm -fr node_modules
                    fi
                """
                echo 'Deleting directory is finished!'
            }
        }


        
        stage('Deploy - Prod') {
            when {
                environment name: 'CHOICE', value:'PROD'
                environment name: 'ACTION', value:'DEPLOY'
            }

            environment {
                PASSWORD = credentials('prod-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.9.71','10.8.9.72','10.8.9.73']
                    def servers_sso = ['10.0.34.101','10.0.34.102']
                    def is_sso_build = false
                    def is_normal_build = false
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to create directory..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                if [ -d ${INSTALL_PATH}/${APP_NAME} ]; then
                                    rm -fr ${INSTALL_PATH}/${APP_NAME}
                                fi
                                mkdir -p ${INSTALL_PATH}/${APP_NAME}
                            '
                        """
                        echo "Creating directory is finished!"
                        echo "#############glaceful delimiter##################"
                        echo "Prepare to copy the packaged file to the target machine ${servers[i]}."
                        echo "Current path is:"
                        sh "pwd"
                        echo "Starting to copy..."
                        if (servers_sso.contains(servers[i])) {
                           if (!is_sso_build) {
                               echo "Start to SSO build the project..."
                               sh "npm run autobuild_sso_prd"
                               echo "SSO Building is finished!"
                               is_sso_build = true
                           }
                           sh "sshpass -p ${PASSWORD} scp -r dist_sso/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"
                        }else {
                            if (!is_normal_build) {
                               echo "Start to normally build the project..."
                               sh "npm run build"
                               echo "Normally building is finished!"
                               is_normal_build = true
                            }
                           sh "sshpass -p ${PASSWORD} scp -r dist/* ${USER}@${servers[i]}:${INSTALL_PATH}/${APP_NAME}"
                        }

                        echo "Copying is finished!"
                       
                    }
                }
            }
        }

        stage('Start - Prod') {
            when {
                environment name: 'CHOICE', value:'PROD'
                environment name: 'ACTION', value:'START'
            }

            environment {
                PASSWORD = credentials('prod-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.9.71','10.8.9.72','10.8.9.73']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                sudo ${APACHE_PATH}/bin/apachectl
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Stop - Prod') {
            when {
                environment name: 'CHOICE', value:'PROD'
                environment name: 'ACTION', value:'STOP'
            }

            environment {
                PASSWORD = credentials('prod-crc-nbform-pass-secret-text')
            }

            steps {
                script {
                    def servers = ['10.8.9.71','10.8.9.72','10.8.9.73']
                    for (int i = 0; i < servers.size(); i++) {
                        echo "Start to launch server..."
                        sh """
                            sshpass -p ${PASSWORD} ssh ${USER}@${servers[i]} '
                                export APACHE_HOME=/app/apache
                                export WEBGATE_HOME=/app/webgate/as_1
                                export LD_LIBRARY_PATH=/app/webgate/as_1/webgate/apache/lib
                                sudo ${APACHE_PATH}/bin/apachectl graceful-stop
                            '
                        """
                        echo "Starting server is finished!"
                    }
                }
            }
        }

        stage('Clean - Prod') {
            when {
                environment name: 'CHOICE', value:'PROD'
                environment name: 'ACTION', value:'CLEAN'
            }

            environment {
                PASSWORD = credentials('prod-crc-nbform-pass-secret-text')
            }

            steps {
                echo "Start to delete directory..."
                sh """
                    if [ -d node_modules ]; then
                        rm -fr node_modules
                    fi
                """
                echo 'Deleting directory is finished!'
            }
        }

    }
}
