- 신고 제출 후 alert → 성공 모달로 교체 (신고현황/새신고 버튼) - cross-nav.js: tkreport 페이지 상단 크로스시스템 네비게이션 배너 - report-status.html: AI 신고 도우미 버튼 추가 - common-header.js: tkqc 헤더에 "신고" 외부 링크 추가 - 배포 스크립트/가이드 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
136 lines
3.7 KiB
Bash
Executable File
136 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# ===================================================================
|
|
# TK Factory Services - 원격 롤백 스크립트 (맥북에서 실행)
|
|
# ===================================================================
|
|
# 사용법: ./scripts/rollback-remote.sh <commit-hash>
|
|
# 설정: ~/.tk-deploy-config
|
|
# ===================================================================
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
CONFIG_FILE="$HOME/.tk-deploy-config"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# === 인자 확인 ===
|
|
TARGET_HASH="${1:-}"
|
|
if [ -z "$TARGET_HASH" ]; then
|
|
echo "사용법: ./scripts/rollback-remote.sh <commit-hash>"
|
|
echo ""
|
|
echo "예시:"
|
|
echo " ./scripts/rollback-remote.sh abc1234"
|
|
echo " ./scripts/rollback-remote.sh abc1234567890"
|
|
echo ""
|
|
echo "최근 커밋 목록:"
|
|
cd "$(dirname "$0")/.."
|
|
git log --oneline -10
|
|
exit 1
|
|
fi
|
|
|
|
# === 설정 로드 ===
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
echo -e "${RED}ERROR: 설정 파일이 없습니다: $CONFIG_FILE${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
source "$CONFIG_FILE"
|
|
|
|
for var in NAS_HOST NAS_USER NAS_DEPLOY_PATH NAS_SUDO_PASS; do
|
|
if [ -z "${!var}" ]; then
|
|
echo -e "${RED}ERROR: $CONFIG_FILE에 $var 가 설정되지 않았습니다${NC}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
DOCKER="/usr/local/bin/docker"
|
|
|
|
ssh_cmd() {
|
|
ssh -o ConnectTimeout=10 "${NAS_USER}@${NAS_HOST}" "$@"
|
|
}
|
|
|
|
nas_docker() {
|
|
ssh_cmd "cd ${NAS_DEPLOY_PATH} && echo '${NAS_SUDO_PASS}' | sudo -S ${DOCKER} $*" 2>&1
|
|
}
|
|
|
|
# === 커밋 유효성 확인 ===
|
|
cd "$PROJECT_DIR"
|
|
|
|
FULL_HASH=$(git rev-parse "$TARGET_HASH" 2>/dev/null || echo "")
|
|
if [ -z "$FULL_HASH" ]; then
|
|
echo -e "${RED}ERROR: 유효하지 않은 커밋 해시입니다: ${TARGET_HASH}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
TARGET_SHORT="${FULL_HASH:0:7}"
|
|
TARGET_MSG=$(git log -1 --format='%s' "$FULL_HASH")
|
|
TARGET_DATE=$(git log -1 --format='%ci' "$FULL_HASH")
|
|
|
|
# === 현재 NAS 상태 확인 ===
|
|
echo "=== TK Factory Services - 원격 롤백 ==="
|
|
echo ""
|
|
|
|
NAS_HASH=$(ssh_cmd "cd ${NAS_DEPLOY_PATH} && git log -1 --format='%H'" 2>/dev/null || echo "")
|
|
NAS_SHORT="${NAS_HASH:0:7}"
|
|
NAS_MSG=$(ssh_cmd "cd ${NAS_DEPLOY_PATH} && git log -1 --format='%s'" 2>/dev/null)
|
|
|
|
echo -e " NAS 현재: ${YELLOW}${NAS_SHORT}${NC} - ${NAS_MSG}"
|
|
echo -e " 롤백 대상: ${CYAN}${TARGET_SHORT}${NC} - ${TARGET_MSG}"
|
|
echo -e " 커밋 날짜: ${TARGET_DATE}"
|
|
|
|
if [ "$FULL_HASH" = "$NAS_HASH" ]; then
|
|
echo ""
|
|
echo -e "${GREEN}이미 해당 버전입니다.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
read -p "롤백을 진행하시겠습니까? [y/N] " confirm
|
|
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
|
|
echo "롤백이 취소되었습니다."
|
|
exit 0
|
|
fi
|
|
|
|
# === 롤백 실행 ===
|
|
echo ""
|
|
echo -e "${CYAN}[1/3] NAS 코드 롤백${NC}"
|
|
|
|
ssh_cmd "cd ${NAS_DEPLOY_PATH} && git fetch origin && git checkout ${FULL_HASH}"
|
|
|
|
echo -e " ${GREEN}완료${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}[2/3] Docker 컨테이너 재빌드${NC}"
|
|
echo " (빌드에 시간이 걸릴 수 있습니다...)"
|
|
echo ""
|
|
|
|
nas_docker "compose up -d --build"
|
|
|
|
echo ""
|
|
echo " nginx 프록시 컨테이너 재시작..."
|
|
nas_docker "restart tk-gateway tk-system2-web tk-system3-web"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}[3/3] 배포 검증${NC} (15초 대기)"
|
|
sleep 15
|
|
|
|
echo ""
|
|
echo "=== Container Status ==="
|
|
nas_docker "compose ps --format 'table {{.Name}}\t{{.Status}}'" || true
|
|
|
|
# 배포 로그 기록
|
|
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
|
ssh_cmd "echo '${TIMESTAMP} | ${TARGET_SHORT} | ROLLBACK: ${TARGET_MSG}' >> ${NAS_DEPLOY_PATH}/DEPLOY_LOG"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}롤백 완료!${NC}"
|
|
echo " 버전: ${TARGET_SHORT} - ${TARGET_MSG}"
|
|
echo ""
|
|
echo -e "${YELLOW}주의: NAS가 detached HEAD 상태입니다.${NC}"
|
|
echo " 다음 정상 배포 시 자동으로 main 브랜치로 복귀합니다."
|