Skip to content

fix: cd.yml 배포 후 헬스체크 및 자동 롤백 추가 #474

Description

@pooreumjung

Fix Report

고쳐야 할 사항

  • cd.ymldeploy job(prod/dev 공통)이 docker run -d로 새 컨테이너를 띄운 직후 별도 검증 없이 바로 종료된다. docker run -d는 컨테이너가 뜨기만 하면 즉시 성공을 반환하므로, 새 이미지가 설정 오류·DB 연결 실패 등으로 부팅 직후 죽어도(CrashLoop) GitHub Actions는 성공(초록불)으로 표시되고 실제 서버는 다운된 채로 "배포 완료" 처리된다.
  • 실패를 감지해도 이전 버전으로 되돌리는 롤백 로직이 없어, 배포 실패 시 사람이 수동으로 복구해야 한다.
  • 기대 동작: docker run 직후 실제 앱이 정상 기동했는지 확인하고, 실패하면 이전 버전으로 자동 복구한 뒤 워크플로우를 실패로 표시해 배포자가 즉시 인지할 수 있어야 한다.

제안하는 방향

  • 헬스체크: management.server.port: 9001로 분리되어 있고 EC2에 127.0.0.1:9001:9001로 바인딩되어 있으므로, SSH 스크립트 안에서 curlhttp://localhost:9001/actuator/health를 일정 간격(예: 5초 간격, 최대 12회)으로 폴링한다.
  • 롤백: 기존 컨테이너를 제거하기 전에 현재 실행 중인 이미지를 eatssu-{env}:rollback 태그로 보존해두고, 새 컨테이너의 헬스체크가 실패하면 새 컨테이너를 내리고 :rollback 이미지로 재기동한 뒤 워크플로우는 exit 1로 실패 처리한다.
  • prod/dev deploy-prod, deploy-dev 스텝 모두 동일하게 적용한다.
  • 범위 밖: 새 마이그레이션이 이전 버전 코드와 호환되지 않는 경우(스키마 하위 호환성)까지는 이번 이슈에서 다루지 않는다.

관련 환경

  • prod, dev (EC2, Docker, GitHub Actions cd.yml)

첨부자료

  • 없음

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

fix고치기

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions