배포 스크립트 가이드 - KimGyuBek/Threadly GitHub Wiki

배포관련 스크립트 가이드

개요

배포 과정에서 사용되는 스크립트 정리


전체 요약

스크립트 역할
build-deploy.sh 배포 태그 생성
blue-green-deploy.sh 무중단 배포 과정 수행
clean-old-images.sh 구버전/미사용 Docker 이미지 정리

스크립트 상세

1. build-deploy.sh

배포하는 이미지의 태그 생성

파일: build-deploy.sh

주요 동작

DATE=$(date +%Y%m%d)                  # 오늘 날짜 → 20250922
COMMIT=$(git rev-parse --short HEAD)  # 현재 커밋 해시 앞 7자리 → a1b2c3d
IMAGE_TAG="${DATE}-${COMMIT}"         # 조합 → 20250922-a1b2c3d
  • (날짜 + 현재 커밋 해시)의 조합으로 태그 생성
  • 빌드 및 배포 과정에서 동일한 태그 사용

2. blue-green-deploy.sh

blue-green 방식의 무중단 배포 수행

파일: blue-green-deploy.sh

주요 동작

1). Nginx 설정파일에서 현재 포트 조회

parse_current_port(){
  local current_port
  current_port=$(grep -Eo 'proxy_pass\s+http://[^:]+:([0-9]+);' "$NGINX_CONF" | awk -F: '{print $NF}' | tr -d ';' | tail -n1)
  [[ -n "${current_port:-}" ]] || { error "NGINX proxy_pass 포트 파싱 실패: $NGINX_CONF"; exit 1; }
  echo "$current_port"
}

2). 새로운 버전 실행

compose_up(){
#  ...
  docker compose -f "$f" -p "$slot" up -d --build
#  ...
}

compose_up "$NEXT"

3). 새로운 버전 헬스 체크

health_check(){
  local port="$1"
  local url="http://localhost:${port}${HEALTH_PATH}"

    # MAX_TRIES 만큼 반복
     curl -fsS "$url" >/dev/null 2>&1;
}

health_check "$NEXT_PORT"

4). 헬스 체크 성공 시 기존 버전 종료 및 Nginx 포트 변경

nginx_port_change(){
#  ...
  sudo sed -i "s/$current_port/$next_port/" "$NGINX_CONF"
#  ...
}

5). 무중단 배포 완료

로깅

[2025-09-13 22:33:42] [INFO ] ======Deploy start======
[2025-09-13 22:33:42] [INFO ] 현재 버전: blue (8080), 배포할 버전: green (8081)
[2025-09-13 22:33:43] [INFO ] 새로운 버전(green) 실행 중...
[2025-09-13 22:33:43] [INFO ] docker compose up -d (green): /home/ubuntu/threadly/infra/app/docker-compose.green.yml
[2025-09-13 22:33:55] [INFO ] Health Check 시작...
[2025-09-13 22:33:55] [INFO ] Health Check 시작...
[2025-09-13 22:34:55] [INFO ] 재시도..
[2025-09-13 22:35:08] [INFO ] Health check 성공!
[2025-09-13 22:35:08] [INFO ] Nginx 포트 전환 중...
[2025-09-13 22:35:08] [INFO ] Nginx Reload 완료
[2025-09-13 22:35:08] [INFO ] 기존 버전(blue) 종료 중...
[2025-09-13 22:35:08] [WARN ] docker compose down (blue): /home/ubuntu/threadly/infra/app/docker-compose.blue.yml
[2025-09-13 22:35:09] [WARN ] 버전: blue 종료 됨
[2025-09-13 22:35:09] [INFO ] ======Deploy Finish======

3. clean-old-images.sh

미사용 및 구버전 Docker 이미지 정리

파일: clean-old-images.sh

주요 동작

1). 특정 {Repository}의 특정 {Tag}를 제외한 이미지 삭제

#    ...
DELETE_TARGETS=$(docker images $IMAGE_NAME --format '{{.Repository}}:{{.Tag}}' | grep -v -e "${IMAGE_NAME}:${IMAGE_TAG}" || true)
#    ...

로깅

[2025-09-14 15:33:02] ======Cleaning old Docker images start======
[2025-09-14 15:33:02] -Target Repository=kimgyubek/threadly-notification
[2025-09-14 15:33:02] -Target Tag=20250914-d6d3a03
[2025-09-14 15:33:02] -Deleted Images:
[2025-09-14 15:33:02]   - kimgyubek/threadly-notification:20250913-99d7d0e
[2025-09-14 15:33:02] ======Cleaning finished======
⚠️ **GitHub.com Fallback** ⚠️