pipeline {
    agent any
    tools {
        jdk 'JDK17'
    }

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

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

        // 자격증명
        SSH_CREDENTIAL = 'op-batch-servers-ssh'
    }

    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 {
                sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
                    sh """
                        ssh ${SERVER_USER}@${SERVER_IP} '
                            mkdir -p ${BACKUP_PATH}
                            if [ -f ${DEPLOY_PATH}/${APP_NAME}.war ]; then
                                cp ${DEPLOY_PATH}/${APP_NAME}.war \
                                   ${BACKUP_PATH}/${APP_NAME}.war.bak
                                echo "백업 완료"
                            else
                                echo "백업 대상 없음 (최초 배포)"
                            fi
                        '
                    """
                }
            }
        }

        stage('Deploy') {
            steps {
                sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
                    sh """
                        # WAR 전송
                        scp build/libs/${APP_NAME}.war \
                            ${SERVER_USER}@${SERVER_IP}:${DEPLOY_PATH}/${APP_NAME}.war

                        # Tomcat 재시작
                        ssh ${SERVER_USER}@${SERVER_IP} '
                            ${TOMCAT_HOME}/bin/shutdown.sh || true
                            sleep 5
                            ${TOMCAT_HOME}/bin/startup.sh
                            echo "Tomcat 재시작 완료"
                        '
                    """
                }
            }
        }
    }

    post {
        success {
            echo "✅ sake_batch 배포 완료"
        }
        failure {
            sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
                sh """
                    ssh ${SERVER_USER}@${SERVER_IP} '
                        if [ -f ${BACKUP_PATH}/${APP_NAME}.war.bak ]; then
                            cp ${BACKUP_PATH}/${APP_NAME}.war.bak \
                               ${DEPLOY_PATH}/${APP_NAME}.war
                            ${TOMCAT_HOME}/bin/shutdown.sh || true
                            sleep 5
                            ${TOMCAT_HOME}/bin/startup.sh
                            echo "롤백 완료"
                        else
                            echo "백업본 없음 - 롤백 불가"
                        fi
                    '
                """
            }
            echo "❌ 배포 실패 - 롤백 처리됨"
        }
    }
}
