Jenkinsfile 변경
This commit is contained in:
192
Jenkinsfile
vendored
192
Jenkinsfile
vendored
@@ -5,23 +5,11 @@ pipeline {
|
|||||||
jdk 'JDK17'
|
jdk 'JDK17'
|
||||||
}
|
}
|
||||||
|
|
||||||
// parameters {
|
|
||||||
// choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택')
|
|
||||||
// choice(name: 'DEPLOY_SERVER_IP', choices: ['172.31.14.11'], description: '배포할 WAS 서버 IP 선택')
|
|
||||||
// string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gconebo.git', description: 'Git 레파지토리 주소')
|
|
||||||
// }
|
|
||||||
|
|
||||||
// parameters {
|
|
||||||
// choice(name: 'ENVIRONMENT', choices: ['stage'], description: '배포할 어플리케이션 profile 선택')
|
|
||||||
// choice(name: 'DEPLOY_SERVER_IP', choices: ['10.100.51.11','10.100.51.12'], description: '배포할 WAS 서버 IP 선택')
|
|
||||||
// string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gconebo.git', description: 'Git 레파지토리 주소')
|
|
||||||
// }
|
|
||||||
|
|
||||||
environment {
|
environment {
|
||||||
SERVER_IP = "${DEPLOY_SERVER_IP}"
|
SERVER_IP = "${DEPLOY_WAS_SERVER_IP}"
|
||||||
SERVER_USER = "tomcat"
|
SERVER_USER = "tomcat"
|
||||||
TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/var/lib/tomcat' : '/usr/local/tomcat'}"
|
TOMCAT_HOME = "${ENVIRONMENT == 'dev' ? '/var/lib/tomcat' : '/usr/local/tomcat'}"
|
||||||
APP_NAME = "sakemall"
|
APP_NAME = "sake"
|
||||||
ROOT_NAME = "ROOT"
|
ROOT_NAME = "ROOT"
|
||||||
DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
|
DEPLOY_PATH = "${TOMCAT_HOME}/webapps"
|
||||||
PROPERTY_PATH = "${DEPLOY_PATH}/${APP_NAME}/WEB-INF/classes"
|
PROPERTY_PATH = "${DEPLOY_PATH}/${APP_NAME}/WEB-INF/classes"
|
||||||
@@ -31,6 +19,9 @@ pipeline {
|
|||||||
BACKUP_FILE = "${BACKUP_PATH}/${WAR_FILE}.bak"
|
BACKUP_FILE = "${BACKUP_PATH}/${WAR_FILE}.bak"
|
||||||
PROPERTY_FILE = "${PROPERTY_PATH}/application-${ENVIRONMENT}.yml"
|
PROPERTY_FILE = "${PROPERTY_PATH}/application-${ENVIRONMENT}.yml"
|
||||||
GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}"
|
GIT_BRANCH = "${ENVIRONMENT == 'dev' ? 'develop' : 'master'}"
|
||||||
|
NGINX_STATIC_PATH = "/var/www/sopmall"
|
||||||
|
NGINX_SERVER_IP = "${DEPLOY_WEB_SERVER_IP}"
|
||||||
|
NGINX_USER = "${ENVIRONMENT == 'dev' ? 'dev1' : 'ubuntu'}"
|
||||||
// SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa"
|
// SSH_KEY_PATH = "C:/Users/CHAMDAHAN-41/.ssh/id_rsa"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,33 +31,39 @@ pipeline {
|
|||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
try {
|
try {
|
||||||
|
echo "Setup parameters 출력"
|
||||||
|
echo "tomcat home here ${env.CATALINA_HOME}"
|
||||||
echo "Setup parameters ${ENVIRONMENT}"
|
echo "Setup parameters ${ENVIRONMENT}"
|
||||||
echo "tomcat home here ${env.TOMCAT_HOME}"
|
echo "Setup parameters 출력 종료"
|
||||||
|
|
||||||
|
|
||||||
if("${ENVIRONMENT}" == "dev" ) {
|
if("${ENVIRONMENT}" == "dev" ) {
|
||||||
properties([
|
properties([
|
||||||
parameters([
|
parameters([
|
||||||
choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택'),
|
choice(name: 'ENVIRONMENT', choices: ['dev'], description: '배포할 어플리케이션 profile 선택'),
|
||||||
choice(name: 'DEPLOY_SERVER_IP', choices: ['172.31.14.11'], description: '배포할 WAS 서버 IP 선택'),
|
choice(name: 'DEPLOY_WAS_SERVER_IP', choices: ['00.00.00.00'], description: 'WAR 배포할 서버IP 선택'),
|
||||||
|
choice(name: 'DEPLOY_WEB_SERVER_IP', choices: ['00.00.00.00'], description: 'STATIC RESOURCE 배포할 서버IP 선택'),
|
||||||
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'),
|
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'),
|
||||||
string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gconebo.git', description: 'Git 레파지토리 주소')
|
string(name: 'GIT_REPO', defaultValue: 'http://115.68.207.90:3000/itfirst/sake.git', description: 'Git 레파지토리 URL'),
|
||||||
|
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY'], description: '배포 대상 선택')
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
}else{
|
}else{
|
||||||
properties([
|
properties([
|
||||||
parameters([
|
parameters([
|
||||||
choice(name: 'ENVIRONMENT', choices: ['stage'], description: '배포할 어플리케이션 profile 선택'),
|
choice(name: 'ENVIRONMENT', choices: ['stage'], description: '배포할 어플리케이션 profile 선택'),
|
||||||
choice(name: 'DEPLOY_SERVER_IP', choices: ['10.100.51.11','10.100.51.12'], description: '배포할 WAS 서버 IP 선택'),
|
choice(name: 'DEPLOY_WAS_SERVER_IP', choices: ['115.68.207.7'], description: 'WAR 배포할 서버IP 선택'),
|
||||||
|
choice(name: 'DEPLOY_WEB_SERVER_IP', choices: ['115.68.208.66'], description: 'STATIC RESOURCE 배포할 서버IP 선택'),
|
||||||
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'),
|
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY', 'PROPERTY_ONLY'], description: '배포 대상 선택'),
|
||||||
string(name: 'GIT_REPO', defaultValue: 'http://172.31.18.11:3000/gcone/gconebo.git', description: 'Git 레파지토리 주소')
|
string(name: 'GIT_REPO', defaultValue: 'http://115.68.207.90:3000/itfirst/sake.git', description: 'Git 레파지토리 URL'),
|
||||||
|
choice(name: 'DEPLOY_TARGET', choices: ['ALL', 'WEB_ONLY', 'WAS_ONLY'], description: '배포 대상 선택')
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
error "Checkout 실패: ${e.getMessage()}"
|
error "Setup parameters 실패: ${e.getMessage()}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,41 +84,93 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Deploy only property') {
|
stage('Prepare and Deploy Static Resources') {
|
||||||
when {
|
when {
|
||||||
expression { params.DEPLOY_TARGET in ['PROPERTY_ONLY'] }
|
expression { params.DEPLOY_TARGET in ['ALL', 'WEB_ONLY'] }
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sshPut remote: [
|
// Static 리소스 준비 (Windows 환경)
|
||||||
name: 'WAS Server',
|
sh 'mkdir static_resources'
|
||||||
host: "${env.SERVER_IP}",
|
sh 'cp -rf src/main/resources/static/* static_resources/'
|
||||||
user: "${env.SERVER_USER}",
|
|
||||||
identityFile: "${env.SSH_KEY_PATH}",
|
|
||||||
allowAnyHosts: true
|
|
||||||
], from: "src/main/resources/application-${params.ENVIRONMENT}.yml", into: "${env.PROPERTY_FILE}"
|
|
||||||
|
|
||||||
// acutuator 호출
|
// Static 리소스 압축 (static_resources 디렉토리 안의 내용만 압축)
|
||||||
|
sh 'tar -cvf static_resources.tar -C static_resources .'
|
||||||
|
|
||||||
|
// Nginx 서버로 Static 리소스 압축 파일 배포
|
||||||
sshCommand remote: [
|
sshCommand remote: [
|
||||||
name: 'Nginx Server',
|
name: 'Nginx Server',
|
||||||
host: "${env.SERVER_IP}",
|
host: "${env.NGINX_SERVER_IP}",
|
||||||
user: "${env.SERVER_USER}",
|
user: "${env.NGINX_USER}",
|
||||||
identityFile: "${env.SSH_KEY_PATH}",
|
identityFile: "${env.SSH_KEY_PATH}",
|
||||||
allowAnyHosts: true
|
allowAnyHosts: true
|
||||||
], command: "curl -X POST http://${env.SERVER_IP}:18210/actuator/refresh"
|
], command: "mkdir -p ${env.NGINX_STATIC_PATH}"
|
||||||
|
|
||||||
echo "application-${params.ENVIRONMENT}.yml 배포 완료"
|
sshPut remote: [
|
||||||
|
name: 'Nginx Server',
|
||||||
|
host: "${env.NGINX_SERVER_IP}",
|
||||||
|
user: "${env.NGINX_USER}",
|
||||||
|
identityFile: "${env.SSH_KEY_PATH}",
|
||||||
|
allowAnyHosts: true
|
||||||
|
], from: 'static_resources.tar', into: "${env.NGINX_STATIC_PATH}"
|
||||||
|
|
||||||
|
// Nginx 서버에서 압축 해제
|
||||||
|
sshCommand remote: [
|
||||||
|
name: 'Nginx Server',
|
||||||
|
host: "${env.NGINX_SERVER_IP}",
|
||||||
|
user: "${env.NGINX_USER}",
|
||||||
|
identityFile: "${env.SSH_KEY_PATH}",
|
||||||
|
allowAnyHosts: true
|
||||||
|
], command: """
|
||||||
|
cd ${env.NGINX_STATIC_PATH}
|
||||||
|
tar -xvf static_resources.tar
|
||||||
|
rm static_resources.tar
|
||||||
|
"""
|
||||||
|
|
||||||
|
echo "Static 리소스가 압축되어 Nginx 서버로 배포 및 압축 해제 완료"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stage('Deploy only property') {
|
||||||
|
// when {
|
||||||
|
// expression { params.DEPLOY_TARGET in ['PROPERTY_ONLY'] }
|
||||||
|
// }
|
||||||
|
// steps {
|
||||||
|
// script {
|
||||||
|
// sshPut remote: [
|
||||||
|
// name: 'WAS Server',
|
||||||
|
// host: "${env.SERVER_IP}",
|
||||||
|
// user: "${env.SERVER_USER}",
|
||||||
|
// identityFile: "${env.SSH_KEY_PATH}",
|
||||||
|
// allowAnyHosts: true
|
||||||
|
// ], from: "src/main/resources/application-${params.ENVIRONMENT}.yml", into: "${env.PROPERTY_FILE}"
|
||||||
|
//
|
||||||
|
// // acutuator 호출
|
||||||
|
// sshCommand remote: [
|
||||||
|
// name: 'Nginx Server',
|
||||||
|
// host: "${env.SERVER_IP}",
|
||||||
|
// user: "${env.SERVER_USER}",
|
||||||
|
// identityFile: "${env.SSH_KEY_PATH}",
|
||||||
|
// allowAnyHosts: true
|
||||||
|
// ], command: "curl -X POST http://${env.SERVER_IP}:18210/actuator/refresh"
|
||||||
|
//
|
||||||
|
// echo "application-${params.ENVIRONMENT}.yml 배포 완료"
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
stage('Build') {
|
stage('Build') {
|
||||||
|
when {
|
||||||
|
expression { params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY'] }
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
try {
|
try {
|
||||||
// sh 'chmod +x gradlew'
|
sh 'chmod +x gradlew'
|
||||||
// sh "./gradlew clean war -x test -Pprofile=${params.ENVIRONMENT}"
|
sh "./gradlew clean war -x test -Pprofile=${params.ENVIRONMENT}"
|
||||||
bat "./gradlew.bat clean build -Pprofile=${params.ENVIRONMENT}"
|
|
||||||
echo "Build 성공"
|
echo "Build 성공"
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
error "Build 실패: ${e.getMessage()}"
|
error "Build 실패: ${e.getMessage()}"
|
||||||
@@ -131,11 +180,13 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stage('Unit Tests') {
|
stage('Unit Tests') {
|
||||||
|
when {
|
||||||
|
expression { params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY'] }
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
try {
|
try {
|
||||||
// sh "./gradlew test"
|
sh "./gradlew test"
|
||||||
bat "./gradlew.bat test"
|
|
||||||
echo "Unit Tests 성공"
|
echo "Unit Tests 성공"
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
error "Unit Tests 실패: ${e.getMessage()}"
|
error "Unit Tests 실패: ${e.getMessage()}"
|
||||||
@@ -145,6 +196,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stage('Backup') {
|
stage('Backup') {
|
||||||
|
when {
|
||||||
|
expression { params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY'] }
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sshCommand remote: [
|
sshCommand remote: [
|
||||||
@@ -168,6 +222,9 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stage('Deploy to Tomcat') {
|
stage('Deploy to Tomcat') {
|
||||||
|
when {
|
||||||
|
expression { params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY'] }
|
||||||
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
sshPut remote: [
|
sshPut remote: [
|
||||||
@@ -185,13 +242,12 @@ pipeline {
|
|||||||
identityFile: "${env.SSH_KEY_PATH}",
|
identityFile: "${env.SSH_KEY_PATH}",
|
||||||
allowAnyHosts: true
|
allowAnyHosts: true
|
||||||
], command: """
|
], command: """
|
||||||
if nc -z localhost 8006; then
|
if nc -z localhost 8005; then
|
||||||
echo "Tomcat이 실행 중입니다. 종료 중..."
|
echo "Tomcat이 실행 중입니다. 종료 중..."
|
||||||
${env.TOMCAT_HOME}/bin/shutdown.sh
|
${env.TOMCAT_HOME}/bin/shutdown.sh
|
||||||
sleep 60
|
sleep 5
|
||||||
rm -rf ${env.TOMCAT_HOME}/webapps/${env.APP_NAME}
|
|
||||||
rm -rf ${env.TOMCAT_HOME}/webapps/${env.ROOT_NAME}
|
rm -rf ${env.TOMCAT_HOME}/webapps/${env.ROOT_NAME}
|
||||||
sleep 60
|
sleep 5
|
||||||
else
|
else
|
||||||
echo "Tomcat이 실행 중이지 않습니다."
|
echo "Tomcat이 실행 중이지 않습니다."
|
||||||
fi
|
fi
|
||||||
@@ -211,32 +267,42 @@ pipeline {
|
|||||||
failure {
|
failure {
|
||||||
script {
|
script {
|
||||||
echo '배포에 실패했습니다. 이전 버전으로 롤백을 시도합니다.'
|
echo '배포에 실패했습니다. 이전 버전으로 롤백을 시도합니다.'
|
||||||
sshCommand remote: [
|
if (params.DEPLOY_TARGET in ['ALL', 'WAS_ONLY']) {
|
||||||
name: 'WAS Server',
|
// WAR 파일 롤백
|
||||||
host: "${env.SERVER_IP}",
|
sshCommand remote: [
|
||||||
user: "${env.SERVER_USER}",
|
name: 'WAS Server',
|
||||||
identityFile: "${env.SSH_KEY_PATH}",
|
host: "${env.SERVER_IP}",
|
||||||
allowAnyHosts: true
|
user: "${env.SERVER_USER}",
|
||||||
], command: """
|
identityFile: "${env.SSH_KEY_PATH}",
|
||||||
if [ -f ${env.BACKUP_FILE} ]; then
|
allowAnyHosts: true
|
||||||
cp ${env.BACKUP_FILE} ${env.DEPLOY_FILE}
|
], command: """
|
||||||
if nc -z localhost 8006; then
|
if [ -f ${env.BACKUP_FILE} ]; then
|
||||||
echo "Tomcat이 실행 중입니다. 종료 중..."
|
cp ${env.BACKUP_FILE} ${env.DEPLOY_FILE}
|
||||||
${env.TOMCAT_HOME}/bin/shutdown.sh
|
if nc -z localhost 8005; then
|
||||||
sleep 10
|
echo "Tomcat이 실행 중입니다. 종료 중..."
|
||||||
|
${env.TOMCAT_HOME}/bin/shutdown.sh
|
||||||
|
sleep 5
|
||||||
|
else
|
||||||
|
echo "Tomcat이 실행 중이지 않습니다."
|
||||||
|
fi
|
||||||
|
${env.TOMCAT_HOME}/bin/startup.sh
|
||||||
|
echo "롤백 완료"
|
||||||
else
|
else
|
||||||
echo "Tomcat이 실행 중이지 않습니다."
|
echo "백업 파일이 존재하지 않아 롤백할 수 없습니다."
|
||||||
fi
|
fi
|
||||||
${env.TOMCAT_HOME}/bin/startup.sh
|
"""
|
||||||
echo "롤백 완료"
|
}
|
||||||
else
|
if (params.DEPLOY_TARGET in ['ALL', 'WEB_ONLY']) {
|
||||||
echo "백업 파일이 존재하지 않아 롤백할 수 없습니다."
|
echo "Static 리소스 롤백이 필요합니다. 수동으로 진행해 주세요."
|
||||||
fi
|
}
|
||||||
"""
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
always {
|
always {
|
||||||
echo '파이프라인 실행이 종료되었습니다.'
|
echo '파이프라인 실행이 종료되었습니다.'
|
||||||
|
if (params.DEPLOY_TARGET in ['ALL', 'WEB_ONLY']) {
|
||||||
|
// 임시 디렉토리 정리
|
||||||
|
sh 'rm -rf static_resources'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user