Jenkins production 배포 환경 추가 (운영서버 배포 테스트까지만 적용)
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/bin/bash
|
||||
# AWS Production 서버에서 실행되는 배포 본체
|
||||
# 사용법: remote_deploy.sh <ARCHIVE_NAME>
|
||||
set -euo pipefail
|
||||
|
||||
ARCHIVE_NAME="$1"
|
||||
|
||||
PROD_TMP_DIR="/tmp/chocomae-deploy"
|
||||
PROD_BACKUP_DIR="/var/backups/chocomae"
|
||||
PROD_HTML_ROOT="/var/www/html"
|
||||
PROD_DEPLOY_DIR="${PROD_HTML_ROOT}/mouse-typing"
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d%H%M%S)
|
||||
NEW_DIR="${PROD_DEPLOY_DIR}_new"
|
||||
OLD_DIR="${PROD_DEPLOY_DIR}_old"
|
||||
|
||||
# ---------- 롤백 함수 ----------
|
||||
SWAPPED=0
|
||||
rollback() {
|
||||
echo "!!! 배포 실패 — 롤백 시작 !!!"
|
||||
if [ "${SWAPPED}" -eq 1 ] && sudo test -d "${OLD_DIR}"; then
|
||||
# 교체 이후 실패 → 구버전 복원
|
||||
sudo rm -rf "${PROD_DEPLOY_DIR}"
|
||||
sudo mv "${OLD_DIR}" "${PROD_DEPLOY_DIR}"
|
||||
echo "구버전 디렉토리 복원 완료"
|
||||
fi
|
||||
sudo rm -rf "${NEW_DIR}"
|
||||
echo "!!! 롤백 완료 — 빌드는 실패로 처리됨 !!!"
|
||||
exit 1
|
||||
}
|
||||
trap rollback ERR
|
||||
|
||||
# ---------- 1. 새 버전을 옆에서 완성 (서비스 무영향 구간) ----------
|
||||
echo "=== [1/4] 새 버전 준비: ${NEW_DIR} ==="
|
||||
sudo rm -rf "${NEW_DIR}"
|
||||
sudo mkdir -p "${NEW_DIR}"
|
||||
sudo tar xzf "${PROD_TMP_DIR}/${ARCHIVE_NAME}" -C "${NEW_DIR}"
|
||||
|
||||
echo "=== [2/4] production 설정 적용 ==="
|
||||
sudo mv -v "${NEW_DIR}/src/game/lib/global/global_variables_release.js" \
|
||||
"${NEW_DIR}/src/game/lib/global/global_variables.js"
|
||||
sudo mv -v "${NEW_DIR}/src/web/server/setup/NA_service_db_setting.php" \
|
||||
"${NEW_DIR}/src/web/server/setup/service_db_setting.php"
|
||||
|
||||
DB_CONFIG="${NEW_DIR}/src/web/server/setup/service_db_setting.php"
|
||||
echo "--- DB 설정 확인 ---"
|
||||
sudo grep -n "db_host\|db_port" "${DB_CONFIG}"
|
||||
|
||||
# ---------- 2. 현재 버전 백업 ----------
|
||||
echo "=== [3/4] 현재 버전 백업 ==="
|
||||
sudo mkdir -p "${PROD_BACKUP_DIR}"
|
||||
if sudo test -d "${PROD_DEPLOY_DIR}"; then
|
||||
sudo tar czf "${PROD_BACKUP_DIR}/chocomae-prod-backup-${TIMESTAMP}.tar.gz" \
|
||||
-C "$(dirname "${PROD_DEPLOY_DIR}")" "$(basename "${PROD_DEPLOY_DIR}")"
|
||||
fi
|
||||
# 7개 초과 백업은 오래된 순으로 정리
|
||||
sudo bash -c "ls -t ${PROD_BACKUP_DIR}/chocomae-prod-backup-*.tar.gz 2>/dev/null | tail -n +8 | xargs -r rm -fv"
|
||||
|
||||
# ---------- 3. 순간 교체 ----------
|
||||
echo "=== [4/4] 디렉토리 스왑 ==="
|
||||
#if sudo test -d "${PROD_DEPLOY_DIR}"; then
|
||||
# sudo mv "${PROD_DEPLOY_DIR}" "${OLD_DIR}"
|
||||
#fi
|
||||
#sudo mv "${NEW_DIR}" "${PROD_DEPLOY_DIR}"
|
||||
#SWAPPED=1
|
||||
|
||||
# index.html은 html 루트에 위치
|
||||
#sudo mv -v "${PROD_DEPLOY_DIR}/index.html" "${PROD_HTML_ROOT}/index.html"
|
||||
|
||||
# ---------- 4. 정리 ----------
|
||||
echo "=== 정리 ==="
|
||||
trap - ERR # 여기부터는 실패해도 롤백 불필요
|
||||
sudo rm -rf "${OLD_DIR}"
|
||||
sudo rm -fv "${PROD_TMP_DIR}/${ARCHIVE_NAME}"
|
||||
sudo rm -fv "${PROD_TMP_DIR}/remote_deploy.sh"
|
||||
|
||||
echo "=== 배포 완료 (backup: ${TIMESTAMP}) ==="
|
||||
Reference in New Issue
Block a user