Jenkins ?? ????? Jenkinsfile ??

This commit is contained in:
Claude Code
2026-05-22 18:04:16 +09:00
parent 43d7dc43e6
commit 6724c04e52

219
Jenkinsfile vendored
View File

@@ -1,170 +1,74 @@
pipeline { pipeline {
agent any agent any
tools { tools {
jdk 'JDK17' jdk 'JDK17'
} }
// parameters {
// choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택')
// choice(name: 'DEPLOY_SERVER_IP', choices: ['172.31.20.11'], description: '배포할 WAS 서버 IP 선택')
// string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gcone_batch.git', description: 'Git 레파지토리 주소')
// }
environment { environment {
SERVER_IP = "${DEPLOY_SERVER_IP}" // 서버 정보
SERVER_USER = "tomcat" SERVER_IP = '115.68.232.36'
TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/var/lib/tomcat' : '/usr/local/tomcat'}" SERVER_USER = 'tomcat'
DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
BACKUP_PATH = "${DEPLOY_PATH}/backup" // 앱 정보
APP_NAME = "gcone_batch" APP_NAME = 'sake_batch'
WAR_FILE = "${APP_NAME}.war" TOMCAT_HOME = '/usr/local/tomcat'
DEPLOY_FILE = "${DEPLOY_PATH}/${WAR_FILE}" DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
BACKUP_FILE = "${BACKUP_PATH}/${WAR_FILE}.bak" BACKUP_PATH = "${TOMCAT_HOME}/backup"
GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}"
// SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa" // 자격증명
SSH_CREDENTIAL = 'op-batch-servers-ssh'
} }
stages { stages {
stage('Setup parameters') {
steps {
script {
try {
echo "Setup parameters ${ENVIRONMENT}"
echo "tomcat home here ${env.TOMCAT_HOME}"
if("${ENVIRONMENT}" == "dev" ) {
properties([
parameters([
choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택'),
choice(name: 'DEPLOY_SERVER_IP', choices: ['172.31.20.11'], description: '배포할 WAS 서버 IP 선택'),
string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gcone_batch.git', description: 'Git 레파지토리 주소')
])
])
}else{
properties([
parameters([
choice(name: 'ENVIRONMENT', choices: ['stage'], description: '배포할 어플리케이션 profile 선택'),
choice(name: 'DEPLOY_SERVER_IP', choices: ['10.100.241.11'], description: '배포할 WAS 서버 IP 선택'),
string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gcone_batch.git', description: 'Git 레파지토리 주소')
])
])
}
} catch (Exception e) {
error "Setup parameters 실패: ${e.getMessage()}"
}
}
}
}
stage('Checkout') { stage('Checkout') {
steps { steps {
script { git branch: 'master',
try { credentialsId: 'itfirst',
echo "Checking out ${env.GIT_BRANCH} branch for ${params.ENVIRONMENT} environment" url: 'http://115.68.207.90:3000/itfirst/sake_batch.git'
git branch: "${env.GIT_BRANCH}", url: "${params.GIT_REPO}"
echo "Checkout 성공: 브랜치 ${env.GIT_BRANCH}, 저장소 ${params.GIT_REPO}"
} catch (Exception e) {
error "Checkout 실패: ${e.getMessage()}"
}
}
} }
} }
stage('Build') { stage('Build') {
steps { steps {
script { sh './gradlew clean war'
try {
if("${RUNNING_OS}" == "linux" ) {
sh 'chmod +x gradlew'
sh "./gradlew clean war -x test -Pprofile=${params.ENVIRONMENT}"
}else{
bat "./gradlew.bat clean build -Pprofile=${params.ENVIRONMENT}"
}
echo "Build 성공"
} catch (Exception e) {
error "Build 실패: ${e.getMessage()}"
}
}
}
}
stage('Unit Tests') {
steps {
script {
try {
if("${RUNNING_OS}" == "linux" ) {
sh "./gradlew test"
}else{
bat "./gradlew.bat test"
}
echo "Unit Tests 성공"
} catch (Exception e) {
error "Unit Tests 실패: ${e.getMessage()}"
}
}
} }
} }
stage('Backup') { stage('Backup') {
steps { steps {
script { sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
sshCommand remote: [ sh """
name: 'WAS Server', ssh ${SERVER_USER}@${SERVER_IP} '
host: "${env.SERVER_IP}", mkdir -p ${BACKUP_PATH}
user: "${env.SERVER_USER}", if [ -f ${DEPLOY_PATH}/${APP_NAME}.war ]; then
identityFile: "${env.SSH_KEY_PATH}", cp ${DEPLOY_PATH}/${APP_NAME}.war \
allowAnyHosts: true ${BACKUP_PATH}/${APP_NAME}.war.bak
], command: """ echo "백업 완료"
if [ -f ${env.DEPLOY_FILE} ]; then else
mkdir -p ${env.BACKUP_PATH} echo "백업 대상 없음 (최초 배포)"
cp ${env.DEPLOY_FILE} ${env.BACKUP_FILE} fi
rm -r ${env.TOMCAT_HOME}/webapps/${env.WAR_FILE} '
echo "기존 WAR 파일 백업 완료"
else
echo "백업할 WAR 파일이 없습니다"
fi
""" """
} }
} }
} }
stage('Deploy to Tomcat') { stage('Deploy') {
steps { steps {
script { sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
sshPut remote: [ sh """
name: 'WAS Server', # WAR 전송
host: "${env.SERVER_IP}", scp build/libs/${APP_NAME}.war \
user: "${env.SERVER_USER}", ${SERVER_USER}@${SERVER_IP}:${DEPLOY_PATH}/${APP_NAME}.war
identityFile: "${env.SSH_KEY_PATH}",
allowAnyHosts: true
], from: "build/libs/${env.WAR_FILE}", into: "${env.DEPLOY_FILE}"
sshCommand remote: [ # Tomcat 재시작
name: 'WAS Server', ssh ${SERVER_USER}@${SERVER_IP} '
host: "${env.SERVER_IP}", ${TOMCAT_HOME}/bin/shutdown.sh || true
user: "${env.SERVER_USER}", sleep 5
identityFile: "${env.SSH_KEY_PATH}", ${TOMCAT_HOME}/bin/startup.sh
allowAnyHosts: true echo "Tomcat 재시작 완료"
], command: """ '
if nc -z localhost 8005; then
echo "Tomcat이 실행 중입니다. 종료 중..."
${env.TOMCAT_HOME}/bin/shutdown.sh
sleep 2
rm -r ${env.TOMCAT_HOME}/webapps/${env.APP_NAME}
sleep 10
else
echo "Tomcat이 실행 중이지 않습니다."
fi
${env.TOMCAT_HOME}/bin/startup.sh
""" """
echo "Deploy 완료 (${params.ENVIRONMENT} 환경, ${env.GIT_BRANCH} 브랜치)"
} }
} }
} }
@@ -172,37 +76,26 @@ pipeline {
post { post {
success { success {
echo '배포가 성공적으로 완료되었습니다.' echo "✅ sake_batch 배포 완료"
} }
failure { failure {
script { sshagent(credentials: ["${SSH_CREDENTIAL}"]) {
echo '배포에 실패했습니다. 이전 버전으로 롤백을 시도합니다.' sh """
sshCommand remote: [ ssh ${SERVER_USER}@${SERVER_IP} '
name: 'WAS Server', if [ -f ${BACKUP_PATH}/${APP_NAME}.war.bak ]; then
host: "${env.SERVER_IP}", cp ${BACKUP_PATH}/${APP_NAME}.war.bak \
user: "${env.SERVER_USER}", ${DEPLOY_PATH}/${APP_NAME}.war
identityFile: "${env.SSH_KEY_PATH}", ${TOMCAT_HOME}/bin/shutdown.sh || true
allowAnyHosts: true sleep 5
], command: """ ${TOMCAT_HOME}/bin/startup.sh
if [ -f ${env.BACKUP_FILE} ]; then echo "롤백 완료"
cp ${env.BACKUP_FILE} ${env.DEPLOY_FILE}
if nc -z localhost 8005; then
echo "Tomcat이 실행 중입니다. 종료 중..."
${env.TOMCAT_HOME}/bin/shutdown.sh
sleep 10
else else
echo "Tomcat이 실행 중이지 않습니다." echo "백업본 없음 - 롤백 불가"
fi fi
${env.TOMCAT_HOME}/bin/startup.sh '
echo "롤백 완료"
else
echo "백업 파일이 존재하지 않아 롤백할 수 없습니다."
fi
""" """
} }
} echo "❌ 배포 실패 - 롤백 처리됨"
always {
echo '파이프라인 실행이 종료되었습니다.'
} }
} }
} }