Files
sake_batch/Jenkinsfile
2026-05-22 18:52:01 +09:00

103 lines
3.2 KiB
Groovy

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