diff --git a/Jenkinsfile b/Jenkinsfile index 4b9efc3..4022f60 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -11,12 +11,14 @@ pipeline { steps { checkout scm } } - // ── stage → 운영서버 Stage 배포 ── + // ── main → 운영서버 Stage 배포 ── stage('Deploy Stage') { - when { branch 'stage' } + when { branch 'main' } steps { sshagent(credentials: ['deploy-ssh-key']) { sh """ + ssh ${DEPLOY_USER}@211.117.60.189 'mkdir -p /home/webservice/api-stage/releases/${RELEASE_ID}' + rsync -az --delete \ --exclude='.git' \ --exclude='.env' \ @@ -44,12 +46,25 @@ pipeline { } } + // ── 운영 배포 승인 ── + stage('Production Approval') { + when { branch 'main' } + steps { + timeout(time: 24, unit: 'HOURS') { + input message: 'Stage 확인 후 운영 배포를 진행하시겠습니까?\nStage API: https://stage-api.sam.it.kr', + ok: '운영 배포 진행' + } + } + } + // ── main → 운영서버 Production 배포 ── stage('Deploy Production') { when { branch 'main' } steps { sshagent(credentials: ['deploy-ssh-key']) { sh """ + ssh ${DEPLOY_USER}@211.117.60.189 'mkdir -p /home/webservice/api/releases/${RELEASE_ID}' + rsync -az --delete \ --exclude='.git' \ --exclude='.env' \ @@ -82,21 +97,18 @@ pipeline { } post { - success { echo '✅ api 배포 완료 (' + env.BRANCH_NAME + ')' } + success { echo "✅ api 배포 완료 (${env.BRANCH_NAME})" } failure { - echo '❌ api 배포 실패 (' + env.BRANCH_NAME + ')' + echo "❌ api 배포 실패 (${env.BRANCH_NAME})" script { - if (env.BRANCH_NAME in ['main', 'stage']) { - def baseDir = env.BRANCH_NAME == 'main' - ? '/home/webservice/api' - : '/home/webservice/api-stage' + if (env.BRANCH_NAME == 'main') { sshagent(credentials: ['deploy-ssh-key']) { sh """ ssh ${DEPLOY_USER}@211.117.60.189 ' - PREV=\$(ls -1dt ${baseDir}/releases/*/ | sed -n "2p" | xargs basename) && - [ -n "\$PREV" ] && ln -sfn ${baseDir}/releases/\$PREV ${baseDir}/current && + PREV=\$(ls -1dt /home/webservice/api/releases/*/ | sed -n "2p" | xargs basename 2>/dev/null) && + [ -n "\$PREV" ] && ln -sfn /home/webservice/api/releases/\$PREV /home/webservice/api/current && sudo systemctl reload php8.4-fpm - ' + ' || true """ } }