CICD Workflow Code


2. 단계별 상세 로직

Phase 1: Build & Test (CI)

  1. 환경 설정: JDK 21 및 Gradle 캐싱을 설정하여 빌드 속도를 최적화합니다.
  2. 빌드: clean build -x test를 통해 실행 가능한 Jar 파일을 생성합니다.
  3. 알림: PR 이벤트일 경우, 결과(성공/실패)를 댓글로 남겨 팀원들에게 가시성을 제공합니다.

Phase 2: Continuous Deployment (CD)

Lightsail 서버에 SSH로 접속하여 다음 과정을 수행합니다.

  1. 포트 판별: 현재 Nginx 설정(service-url.inc)을 확인하여 현재 포트(Blue: 8080 또는 Green: 8081)를 파악하고 배포할 타겟 포트를 결정합니다.
  2. 코드 동기화: git fetchreset을 통해 최신 소스코드를 반영하고 기존 커밋 해시를 저장(롤백 대비)합니다.
  3. 환경 변수 주입: GitHub Secrets로부터 전달받은 변수들로 .env 파일을 동적으로 생성합니다.
  4. 컨테이너 가동: Docker Compose 프로젝트 이름(p)을 컬러명으로 지정하여 타겟 포트에서 새 컨테이너를 빌드 및 실행합니다.
  5. 헬스 체크: actuator/health 엔드포인트를 최대 120초간 모니터링하여 서비스가 정상적으로 떴는지 검증합니다.
  6. 트래픽 전환: Nginx의 set $service_url 값을 변경하고 reload하여 새 컨테이너로 유입을 전환합니다.
  7. 구 버전 정리: 기존에 동작하던 이전 컬러 컨테이너를 중지하고 미사용 이미지를 삭제하여 서버 리소스를 확보합니다.

3. 예외 처리 및 롤백 전략