pipeline { agent any options { disableConcurrentBuilds() } environment { DEPLOY_USER = 'hskwon' RELEASE_ID = new Date().format('yyyyMMdd_HHmmss') } stages { stage('Checkout') { steps { checkout scm script { env.GIT_COMMIT_MSG = sh(script: "git log -1 --pretty=format:'%s'", returnStdout: true).trim() } slackSend channel: '#deploy_mng', color: '#439FE0', tokenCredentialId: 'slack-token', message: "πŸš€ *mng* λΉŒλ“œ μ‹œμž‘ (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|λΉŒλ“œ #${env.BUILD_NUMBER}>" } } // ── main β†’ μš΄μ˜μ„œλ²„ Production 배포 ── stage('Deploy Production') { when { branch 'main' } steps { sshagent(credentials: ['deploy-ssh-key']) { sh """ rsync -az --delete \ --exclude='.git' \ --exclude='.env' \ --exclude='storage/app' \ --exclude='storage/logs' \ --exclude='storage/framework/sessions' \ --exclude='storage/framework/cache' \ --exclude='node_modules' \ . ${DEPLOY_USER}@211.117.60.189:/home/webservice/mng/releases/${RELEASE_ID}/ ssh ${DEPLOY_USER}@211.117.60.189 ' cd /home/webservice/mng/releases/${RELEASE_ID} && mkdir -p bootstrap/cache storage/framework/{views,cache/data,sessions} storage/logs && sudo chown -R www-data:webservice storage/logs && ln -sfn /home/webservice/mng/shared/.env .env && sudo chmod 640 /home/webservice/mng/shared/.env && ln -sfn /home/webservice/mng/shared/storage/app storage/app && ln -sfn /home/webservice/mng/shared/storage/credentials storage/credentials && composer install --no-dev --optimize-autoloader --no-interaction && npm install --prefer-offline && npm run build && php artisan config:cache && php artisan route:cache && php artisan view:cache && php artisan migrate --force && ln -sfn /home/webservice/mng/releases/${RELEASE_ID} /home/webservice/mng/current && sudo systemctl reload php8.4-fpm && cd /home/webservice/mng/releases && ls -1dt */ | tail -n +6 | xargs rm -rf 2>/dev/null || true ' """ } } } // develop β†’ Jenkins κ΄€μ—¬ μ•ˆν•¨ (κΈ°μ‘΄ post-update hook μœ μ§€) } post { success { slackSend channel: '#deploy_mng', color: 'good', tokenCredentialId: 'slack-token', message: "βœ… *mng* 배포 성곡 (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|λΉŒλ“œ #${env.BUILD_NUMBER}>" } failure { slackSend channel: '#deploy_mng', color: 'danger', tokenCredentialId: 'slack-token', message: "❌ *mng* 배포 μ‹€νŒ¨ (`${env.BRANCH_NAME}`)\n${env.GIT_COMMIT_MSG}\n<${env.BUILD_URL}|λΉŒλ“œ #${env.BUILD_NUMBER}>" script { if (env.BRANCH_NAME == 'main') { sshagent(credentials: ['deploy-ssh-key']) { sh """ ssh ${DEPLOY_USER}@211.117.60.189 ' PREV=\$(ls -1dt /home/webservice/mng/releases/*/ | sed -n "2p" | xargs basename) && [ -n "\$PREV" ] && ln -sfn /home/webservice/mng/releases/\$PREV /home/webservice/mng/current && sudo systemctl reload php8.4-fpm ' """ } } } } } }