From 4f4fa2dd04bc2278b009050a11e828ca4ca86928 Mon Sep 17 00:00:00 2001 From: DEV-SERVER Date: Tue, 24 Feb 2026 13:22:22 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20stage=20=EB=B8=8C=EB=9E=9C=EC=B9=98?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0,=20main=EC=97=90=EC=84=9C=20Stage?= =?UTF-8?q?=E2=86=92=EC=8A=B9=EC=9D=B8=E2=86=92Production=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=20=ED=9D=90=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - main: Stage 자동 배포 → Jenkins 승인(24h) → Production 배포 - stage 브랜치 더 이상 사용 안함 - Production 실패 시 자동 롤백 --- Jenkinsfile | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) 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 """ } }