You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
cd.yml의 deploy 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 스크립트 안에서 curl로 http://localhost:9001/actuator/health를 일정 간격(예: 5초 간격, 최대 12회)으로 폴링한다.
롤백: 기존 컨테이너를 제거하기 전에 현재 실행 중인 이미지를 eatssu-{env}:rollback 태그로 보존해두고, 새 컨테이너의 헬스체크가 실패하면 새 컨테이너를 내리고 :rollback 이미지로 재기동한 뒤 워크플로우는 exit 1로 실패 처리한다.
prod/dev deploy-prod, deploy-dev 스텝 모두 동일하게 적용한다.
범위 밖: 새 마이그레이션이 이전 버전 코드와 호환되지 않는 경우(스키마 하위 호환성)까지는 이번 이슈에서 다루지 않는다.
Fix Report
고쳐야 할 사항
cd.yml의deployjob(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 스크립트 안에서curl로http://localhost:9001/actuator/health를 일정 간격(예: 5초 간격, 최대 12회)으로 폴링한다.eatssu-{env}:rollback태그로 보존해두고, 새 컨테이너의 헬스체크가 실패하면 새 컨테이너를 내리고:rollback이미지로 재기동한 뒤 워크플로우는exit 1로 실패 처리한다.deploy-prod,deploy-dev스텝 모두 동일하게 적용한다.관련 환경
cd.yml)첨부자료