최종 코드를 깃허브로 푸시합니다.
배포가 자동으로 진행되면 CodeDeploy 로그로 잘 진행되는지 확인해 봅니다.
tail -f /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
그럼 다음과 같은 메시지가 차례로 출력됩니다.
[2021-07-20 00:43:07.431] [d-54435O08B]LifecycleEvent - ApplicationStart
[2021-07-20 00:43:07.432] [d-54435O08B]Script - deploy.sh
[2021-07-20 00:43:07.445] [d-54435O08B][stdout]> Build 파일 복사
[2021-07-20 00:43:07.523] [d-54435O08B][stdout]> 현재 구동중인 애플리케이션 pid 확인
[2021-07-20 00:43:07.531] [d-54435O08B][stdout]현재 구동중인 어플리케이션 pid: 4260
[2021-07-20 00:43:07.531] [d-54435O08B][stdout]> kill -15 4260
[2021-07-20 00:43:12.838] [d-54435O08B][stdout]> 새 어플리케이션 배포
[2021-07-20 00:43:12.841] [d-54435O08B][stdout]> JAR Name: /home/ec2-user/app/step2/used-car-admin-0.0.1-SNAPSHOT.jar
[2021-07-20 00:43:12.841] [d-54435O08B][stdout]> /home/ec2-user/app/step2/used-car-admin-0.0.1-SNAPSHOT.jar 에 실행권한 추가
[2021-07-20 00:43:12.841] [d-54435O08B][stdout]> /home/ec2-user/app/step2/used-car-admin-0.0.1-SNAPSHOT.jar 실행
[2021-07-20 01:33:24.231] [d-9S42IR18B]LifecycleEvent - AfterInstall
[2021-07-20 01:33:24.232] [d-9S42IR18B]Script - stop.sh
[2021-07-20 01:33:24.334] [d-9S42IR18B][stdout]> 8081 에서 구동중인 애플리케이션 pid 확인
[2021-07-20 01:33:24.380] [d-9S42IR18B][stdout]> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다.
[2021-07-20 01:33:25.267] [d-9S42IR18B]LifecycleEvent - ApplicationStart
[2021-07-20 01:33:25.268] [d-9S42IR18B]Script - start.sh
[2021-07-20 01:33:25.283] [d-9S42IR18B][stdout]> Build 파일 복사
[2021-07-20 01:33:25.283] [d-9S42IR18B][stdout]> cp /home/ec2-user/app/step3/zip/*.jar /home/ec2-user/app/step3/
[2021-07-20 01:33:25.352] [d-9S42IR18B][stdout]> 새 어플리케이션 배포
[2021-07-20 01:33:25.355] [d-9S42IR18B][stdout]> JAR Name: /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar
[2021-07-20 01:33:25.355] [d-9S42IR18B][stdout]> /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar 에 실행권한 추가
[2021-07-20 01:33:25.356] [d-9S42IR18B][stdout]> /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar 실행
[2021-07-20 01:33:25.392] [d-9S42IR18B][stdout]> /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar 를 profile=real1 로 실행합니다.
[2021-07-20 01:33:26.402] [d-9S42IR18B]LifecycleEvent - ValidateService
[2021-07-20 01:33:26.404] [d-9S42IR18B]Script - health.sh
[2021-07-20 01:33:26.569] [d-9S42IR18B][stdout]> Health Check Start!
[2021-07-20 01:33:26.569] [d-9S42IR18B][stdout]> IDLE_PORT: 8081
[2021-07-20 01:33:26.569] [d-9S42IR18B][stdout]> curl -s http://localhost:8081/profile
[2021-07-20 01:33:36.629] [d-9S42IR18B][stdout]> Health check의 응답을 알 수 없거나 혹은 실행 상태가 아닙니다.
[2021-07-20 01:33:36.629] [d-9S42IR18B][stdout]> Health check:
[2021-07-20 01:33:36.629] [d-9S42IR18B][stdout]> Health check 연결 실패. 재시도...
[2021-07-20 01:33:46.975] [d-9S42IR18B][stdout]> Health check 성공
[2021-07-20 01:33:47.033] [d-9S42IR18B][stdout]> 전환할 Port: 8081
[2021-07-20 01:33:47.033] [d-9S42IR18B][stdout]> Port 전환
[2021-07-20 01:33:47.053] [d-9S42IR18B][stdout]set $service_url http://127.0.0.1:8081;
[2021-07-20 01:33:47.054] [d-9S42IR18B][stdout]> 엔진엑스 Reload
[2021-07-20 01:33:47.075] [d-9S42IR18B][stderr]Redirecting to /bin/systemctl reload nginx.service
스프링 부트 로그도 보고 싶다면 다음 명령어로 확인할 수 있습니다.
vim ~/app/step3/nohup.out
그럼 스프링 부트 실행 로그를 직접 볼 수 있습니다.
한 번 더 배포하면 그때는 real2로 배포됩니다.
이 과정에서 브라우저 새로고침을 해보면 전혀 중단 없는 것을 확인할 수 있습니다.
2번 배포를 진행한 뒤에 다음과 같이 자바 애플리케이션 실행 여부를 확인합니다.
ps -ef | grep java
다음과 같이 2개의 애플리케이션이 실행되고 있음을 알 수 있습니다.
ec2-user 4922 1 3 01:33 ? 00:00:21 java -jar -Dspring.config.location=classpath:/application.properties,classpath:/application-real1.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties -Dspring.profiles.active=real1 /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar
ec2-user 5093 1 41 01:44 ? 00:00:17 java -jar -Dspring.config.location=classpath:/application.properties,classpath:/application-real2.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties -Dspring.profiles.active=real2 /home/ec2-user/app/step3/used-car-admin-0.0.1-SNAPSHOT.jar
이제 이 시스템은 마스터 브랜치에 푸시가 발생하면 자동으로 서버 배포가 진행되고, 서버 중단 역시 전혀 없는 시스템이 되었습니다.
참고
'CI & CD' 카테고리의 다른 글
[Nginx] 24시간 365일 중단 없는 서비스 만들기 3 - 무중단 배포 스크립트 만들기 (0) | 2021.07.20 |
---|---|
[Nginx] 24시간 365일 중단 없는 서비스 만들기 2 - 엔진엑스 설치와 스프링 부트 연동하기 (0) | 2021.07.19 |
[Nginx] 24시간 365일 중단 없는 서비스 만들기 1 - 무중단 배포 소개 (0) | 2021.07.19 |
[Travis CI] 코드가 푸시되면 자동으로 배포하기 5 - 배포 자동화 구성 (0) | 2021.07.18 |
[Travis CI] 코드가 푸시되면 자동으로 배포하기 4 - Travis CI와 AWS S3, CodeDeploy 연동하기 (0) | 2021.07.18 |
댓글