pipeline {
    agent any
    tools {
        jdk 'JDK17'
    }

    environment {
        // 서버 정보
        SERVER_IP      = '10.2.1.76'
        SERVER_USER    = 'tomcat'

        // 앱 정보
        APP_NAME       = 'sake_batch'
        TOMCAT_HOME    = '/usr/local/tomcat'
        DEPLOY_PATH    = "${TOMCAT_HOME}/webapps"
        BACKUP_PATH    = "${TOMCAT_HOME}/backup"
        DEPLOY_FILE    = "${TOMCAT_HOME}/webapps/sake_batch.war"
        BACKUP_FILE    = "${TOMCAT_HOME}/backup/sake_batch.war.bak"

        // SSH 키 (쇼핑몰과 동일하게 주석 처리 - jenkins 기본 키 사용)
        SSH_KEY_PATH = "/var/lib/jenkins/.ssh/batch_server_key"
    }

    stages {
        stage('Checkout') {
            steps {
                git branch: 'master',
                    credentialsId: 'itfirst',
                    url: 'http://115.68.207.90:3000/itfirst/sake_batch.git'
            }
        }

        stage('Build') {
            steps {
                sh 'chmod +x gradlew'
                sh './gradlew clean war'
            }
        }

        stage('Backup') {
            steps {
                script {
                    sshCommand remote: [
                        name: 'Batch Server',
                        host: "${env.SERVER_IP}",
                        user: "${env.SERVER_USER}",
                        identityFile: "${env.SSH_KEY_PATH}",
                        allowAnyHosts: true
                    ], command: """
                        if [ -f ${env.DEPLOY_FILE} ]; then
                            mkdir -p ${env.BACKUP_PATH}
                            cp ${env.DEPLOY_FILE} ${env.BACKUP_FILE}
                            echo '기존 WAR 파일 백업 완료'
                        else
                            echo '백업할 WAR 파일이 없습니다 (최초 배포)'
                        fi
                    """
                }
            }
        }

        stage('Deploy') {
            steps {
                script {
                    sshPut remote: [
                        name: 'Batch Server',
                        host: "${env.SERVER_IP}",
                        user: "${env.SERVER_USER}",
                        identityFile: "${env.SSH_KEY_PATH}",
                        allowAnyHosts: true
                    ], from: "build/libs/${env.APP_NAME}.war",
                       into: "${env.DEPLOY_FILE}"

                    sshCommand remote: [
                        name: 'Batch Server',
                        host: "${env.SERVER_IP}",
                        user: "${env.SERVER_USER}",
                        identityFile: "${env.SSH_KEY_PATH}",
                        allowAnyHosts: true
                    ], command: """
                        ${env.TOMCAT_HOME}/bin/shutdown.sh || true
                        sleep 5
                        ${env.TOMCAT_HOME}/bin/startup.sh
                        echo 'Tomcat 재시작 완료'
                    """
                }
            }
        }
    }

    post {
        success {
            echo '✅ sake_batch 배포 완료'
        }
        failure {
            script {
                sshCommand remote: [
                    name: 'Batch Server',
                    host: "${env.SERVER_IP}",
                    user: "${env.SERVER_USER}",
                    identityFile: "${env.SSH_KEY_PATH}",
                    allowAnyHosts: true
                ], command: """
                    if [ -f ${env.BACKUP_FILE} ]; then
                        cp ${env.BACKUP_FILE} ${env.DEPLOY_FILE}
                        ${env.TOMCAT_HOME}/bin/shutdown.sh || true
                        sleep 5
                        ${env.TOMCAT_HOME}/bin/startup.sh
                        echo '⚠️ 롤백 완료'
                    else
                        echo '⚠️ 백업본 없음 - 롤백 불가'
                    fi
                """
            }
            echo '❌ 배포 실패 - 롤백 처리됨'
        }
    }
}
