#!/usr/bin/env bash # ============================================================================== # exAichatbot_agent — Gitea push → exdev 서버 빌드·배포 # 설치: /Volumes/ADATA/git/deploy-exAichatbot_agent.sh # 호출: post-receive (main 브랜치 push) # ============================================================================== set -euo pipefail GIT_DIR="${GIT_DIR:-/Volumes/ADATA/gitea/data/gitea-repositories/aidev/exaichatbot_agent.git}" WORK_TREE="${WORK_TREE:-/Users/aidev/dev/exAichatbot_agent}" BRANCH="${BRANCH:-main}" DEPLOY_LOG="${DEPLOY_LOG:-/Volumes/ADATA/logs/deploy/exAichatbot_agent.log}" LOG_TAG="[exAichatbot_agent-deploy]" # 레거시 bare repo (Gitea 미사용 시) # GIT_DIR=/Volumes/ADATA/git/exAichatbot_agent.git export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:${PATH:-/usr/bin:/bin}" mkdir -p "$(dirname "$DEPLOY_LOG")" exec >> "$DEPLOY_LOG" 2>&1 log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG $*"; } fail() { log "[ERROR] $*"; exit 1; } LOCK_FILE="/tmp/exAichatbot_agent_deploy.lock" if [[ -f "$LOCK_FILE" ]]; then LOCK_PID="$(cat "$LOCK_FILE" 2>/dev/null || echo "")" if [[ -n "$LOCK_PID" ]] && kill -0 "$LOCK_PID" 2>/dev/null; then fail "다른 배포 진행 중 (PID: $LOCK_PID)" fi rm -f "$LOCK_FILE" fi echo $$ > "$LOCK_FILE" trap 'rm -f "$LOCK_FILE"; log "락 해제"' EXIT log "======================================================" log " exAichatbot Agent 2.0 배포 시작" log " GIT_DIR : $GIT_DIR" log " WORK_TREE : $WORK_TREE" log " BRANCH : $BRANCH" log "======================================================" [[ -d "$GIT_DIR" ]] || fail "GIT_DIR 없음: $GIT_DIR" mkdir -p "$WORK_TREE" log "[Phase 1] git checkout -f $BRANCH" git --work-tree="$WORK_TREE" --git-dir="$GIT_DIR" checkout -f "$BRANCH" COMMIT="$(git --git-dir="$GIT_DIR" rev-parse --short HEAD)" log "체크아웃: $COMMIT" chmod +x "$WORK_TREE/server-dev/"*.sh 2>/dev/null || true chmod +x "$WORK_TREE/chatbotApp-chatbot2.0-agent/build.sh" 2>/dev/null || true log "[Phase 2] stop-all-server.sh" "$WORK_TREE/server-dev/stop-all-server.sh" --keep-caddy || true log "[Phase 3] .env 준비" ENV_FILE="$WORK_TREE/exAiChatBot-chatbot2.0-agent/.env" if [[ ! -f "$ENV_FILE" ]]; then cp "$WORK_TREE/server-dev/env.exdev-server.template" "$ENV_FILE" log ".env 생성 (env.exdev-server.template)" fi log "[Phase 4] start-all-server.sh (빌드 포함)" "$WORK_TREE/server-dev/start-all-server.sh" log "======================================================" log " 배포 완료 — $COMMIT" log " UI: https://chatbot.exdev.co.kr/chatbot/app/" log "======================================================"