상시 프리렌더와 중복 예약 안내를 없애고, 검수된 발행 버전을 보존한다. 미리보기는 실제 렌더 완료까지 스피너를 표시한다. 사이트 81건, 발행·롤백·서치콘솔 45건, 프로세스 수명 3건 통과. 빌더·사이트 빌드 및 compose 설정 검증 통과.
41 lines
1.5 KiB
Bash
Executable File
41 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 서버 변경과 꺼진 admin을 보존한다. 렌더러 배포도 기존 사이트를 재굽지 않는다.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
PULL=1
|
|
ONLY=0
|
|
TARGETS=()
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--no-pull) PULL=0 ;;
|
|
--only) ONLY=1 ;;
|
|
-h|--help) echo "사용법: ./deploy.sh [--no-pull] [--only] [서비스...]"; exit 0 ;;
|
|
-*) echo "모르는 옵션: $arg" >&2; exit 2 ;;
|
|
*) TARGETS+=("${arg#o2o-web4ai-}") ;;
|
|
esac
|
|
done
|
|
if [ "$PULL" = 1 ]; then
|
|
git diff --quiet && git diff --cached --quiet || { echo "서버 변경을 먼저 정리하세요" >&2; exit 1; }
|
|
git pull --ff-only origin "${DEPLOY_BRANCH:-main}"
|
|
fi
|
|
[ ${#TARGETS[@]} -gt 0 ] || TARGETS=(solution-backend solution-worker solution-site)
|
|
RUNNING=$(docker compose ps --services --status running)
|
|
if [ "$ONLY" = 0 ]; then
|
|
case " ${TARGETS[*]} " in
|
|
*" solution-backend "*|*" solution-worker "*)
|
|
TARGETS+=(solution-backend solution-worker)
|
|
if grep -qx admin-backend <<<"$RUNNING"; then TARGETS+=(admin-backend); fi ;;
|
|
esac
|
|
fi
|
|
SERVICES=()
|
|
for target in "${TARGETS[@]}"; do
|
|
case " ${SERVICES[*]-} " in *" $target "*) ;; *) SERVICES+=("$target");; esac
|
|
done
|
|
# site의 렌더러도 worker 이미지에 들어간다.
|
|
case " ${SERVICES[*]} " in
|
|
*" solution-site "*) case " ${SERVICES[*]} " in *" solution-worker "*) ;; *) SERVICES+=(solution-worker);; esac ;;
|
|
esac
|
|
docker compose build "${SERVICES[@]}"
|
|
docker compose up -d --no-deps --force-recreate "${SERVICES[@]}"
|
|
docker compose ps
|