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 "❌ 배포 실패 - 롤백 처리됨" } } }