From 6724c04e5240ace4e9ee870f5e30a32f424a72f8 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Fri, 22 May 2026 18:04:16 +0900 Subject: [PATCH] Jenkins ?? ????? Jenkinsfile ?? --- Jenkinsfile | 219 ++++++++++++++-------------------------------------- 1 file changed, 56 insertions(+), 163 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 333ca45..066bc88 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,170 +1,74 @@ pipeline { agent any - tools { 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 { - SERVER_IP = "${DEPLOY_SERVER_IP}" - SERVER_USER = "tomcat" - TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/var/lib/tomcat' : '/usr/local/tomcat'}" - DEPLOY_PATH = "${TOMCAT_HOME}/webapps" - BACKUP_PATH = "${DEPLOY_PATH}/backup" - APP_NAME = "gcone_batch" - WAR_FILE = "${APP_NAME}.war" - DEPLOY_FILE = "${DEPLOY_PATH}/${WAR_FILE}" - BACKUP_FILE = "${BACKUP_PATH}/${WAR_FILE}.bak" - GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}" -// SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa" + // 서버 정보 + 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('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') { steps { - script { - try { - echo "Checking out ${env.GIT_BRANCH} branch for ${params.ENVIRONMENT} environment" - git branch: "${env.GIT_BRANCH}", url: "${params.GIT_REPO}" - echo "Checkout 성공: 브랜치 ${env.GIT_BRANCH}, 저장소 ${params.GIT_REPO}" - } catch (Exception e) { - error "Checkout 실패: ${e.getMessage()}" - } - } + git branch: 'master', + credentialsId: 'itfirst', + url: 'http://115.68.207.90:3000/itfirst/sake_batch.git' } } stage('Build') { steps { - script { - 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()}" - } - } + sh './gradlew clean war' } } stage('Backup') { steps { - script { - sshCommand remote: [ - name: 'WAS 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} - rm -r ${env.TOMCAT_HOME}/webapps/${env.WAR_FILE} - echo "기존 WAR 파일 백업 완료" - else - echo "백업할 WAR 파일이 없습니다" - fi + 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 to Tomcat') { + stage('Deploy') { steps { - script { - sshPut remote: [ - name: 'WAS Server', - host: "${env.SERVER_IP}", - user: "${env.SERVER_USER}", - identityFile: "${env.SSH_KEY_PATH}", - allowAnyHosts: true - ], from: "build/libs/${env.WAR_FILE}", into: "${env.DEPLOY_FILE}" + sshagent(credentials: ["${SSH_CREDENTIAL}"]) { + sh """ + # WAR 전송 + scp build/libs/${APP_NAME}.war \ + ${SERVER_USER}@${SERVER_IP}:${DEPLOY_PATH}/${APP_NAME}.war - sshCommand remote: [ - name: 'WAS Server', - host: "${env.SERVER_IP}", - user: "${env.SERVER_USER}", - identityFile: "${env.SSH_KEY_PATH}", - allowAnyHosts: true - ], 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 + # Tomcat 재시작 + ssh ${SERVER_USER}@${SERVER_IP} ' + ${TOMCAT_HOME}/bin/shutdown.sh || true + sleep 5 + ${TOMCAT_HOME}/bin/startup.sh + echo "Tomcat 재시작 완료" + ' """ - - echo "Deploy 완료 (${params.ENVIRONMENT} 환경, ${env.GIT_BRANCH} 브랜치)" } } } @@ -172,37 +76,26 @@ pipeline { post { success { - echo '배포가 성공적으로 완료되었습니다.' + echo "✅ sake_batch 배포 완료" } failure { - script { - echo '배포에 실패했습니다. 이전 버전으로 롤백을 시도합니다.' - sshCommand remote: [ - name: 'WAS 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} - if nc -z localhost 8005; then - echo "Tomcat이 실행 중입니다. 종료 중..." - ${env.TOMCAT_HOME}/bin/shutdown.sh - sleep 10 + 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 "Tomcat이 실행 중이지 않습니다." + echo "백업본 없음 - 롤백 불가" fi - ${env.TOMCAT_HOME}/bin/startup.sh - echo "롤백 완료" - else - echo "백업 파일이 존재하지 않아 롤백할 수 없습니다." - fi + ' """ } - } - always { - echo '파이프라인 실행이 종료되었습니다.' + echo "❌ 배포 실패 - 롤백 처리됨" } } -} \ No newline at end of file +}