What is this issue? 🛠️
prod 배포 파이프라인(deploy.sh)에서 새 컨테이너의 헬스체크가 실패해도 배포가 "성공"으로 처리되는 문제가 있습니다.
실제로 release/411 배포(#411 머지) 때 green 컨테이너 헬스체크가 100초 안에 통과하지 못했는데, 다음과 같은 일이 발생했습니다.
- green 컨테이너는 새 코드로 정상 기동됐지만, 헬스체크 타임아웃(20회 × 5초 = 100초)을 넘김
- deploy.sh가 헬스 실패 시 Nginx 업스트림 전환을 스킵 → 운영 트래픽이 계속 옛 컨테이너(blue, 옛 코드)로 감
- 그런데 스크립트가 exit 1 없이 정상 종료(0) → GitHub Actions는 "배포 성공(초록불)"으로 표시
- 결과적으로 "배포는 성공처럼 보이는데 실제로는 옛 버전이 서빙" 되는 거짓 성공 상태 발생 (userId 필드 미반영으로 발견됨)
원인 코드
# 헬스 실패 시
if [ "$SUCCESS" -ne 1 ]; then
echo "[ERROR] Health check failed on :${PORT_NEW}"
ROLLBACK=1 # ← 변수만 세팅, 사용처 없음 / exit 1 없음 → 스크립트 exit 0
fi
# 전환은 성공일 때만 수행
if [ "$SUCCESS" -eq 1 ]; then
switch_upstream "${TARGET}" # 헬스 실패 시 통째로 스킵
docker stop "hilingual-${OLD}"
fi
영향
- 무중단(옛 버전 유지)이라 장애로 보이지 않아 감지가 매우 어려움 (조용한 거짓 성공)
- 헬스 타임아웃이 부팅 시간 대비 빠듯해(100초) 콜드스타트 시 간헐적으로 재현
Progress 🏃♀️
What is this issue? 🛠️
prod 배포 파이프라인(deploy.sh)에서 새 컨테이너의 헬스체크가 실패해도 배포가 "성공"으로 처리되는 문제가 있습니다.
실제로 release/411 배포(#411 머지) 때 green 컨테이너 헬스체크가 100초 안에 통과하지 못했는데, 다음과 같은 일이 발생했습니다.
원인 코드
영향
Progress 🏃♀️