이것이 점프 투 공작소

CodeDeploy에서 ApplicationStop 에러날때 본문

aws

CodeDeploy에서 ApplicationStop 에러날때

겅겅겅 2023. 6. 14. 21:02

Gitlab에서 CodeDeploy를 이용해 EC2 개발서버에 배포하던중 최초 성공 이후,

그 다음 배포에서 계속 CodeDeploy의 ApplicationStop에서 에러가 지속적으로 발생하였습니다..

 

 

 

Appspec.yml에 ApplicationStop에 해당하는 kill_process.sh 스크립트 내용를 바꾸었는데

계속 최초 성공하였을때 스크립트가 실행되고 있었습니다.

혹시 캐시로 스크립트를 실행시키나..? 라는 생각이들어 CodeDeploy의 파이프라인을 찾아보았습니다.

 

CodeDeploy LifeCycleHook

LifeCycleHook에 대한 공식문서를 살펴보면

 

(아래 글은 LifeCycleHook에 대한 AWS 공식문서를 가져왔습니다.)

 

1. ApplicationStop

이 배포 수명 주기 이벤트는 애플리케이션 수정이 다운로드되기 전에도 발생합니다. 이 이벤트에 대해서는 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하도록 스크립트를 지정할 수 있습니다. 이 배포 수명 주기 이벤트에 사용되는 AppSpec 파일 및 스크립트는 이전에 성공적으로 배포된 애플리케이션 수정에서 가져옵니다.가장 마지막으로 배포가 완료된 애플리케이션 수정의 위치를 확인하기 위해 CodeDeploy 에이전트는 deployment-group-id_last_successful_install 파일에 나와 있는 위치를 찾습니다. 이 파일의 위치는 다음과 같습니다.

Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-instructions 폴더 ~~~

 

공식문서에 답이 나와있었습니다. CodeDeploy는 최초 성공시 ApplicationStop hook에서는

 /opt/codedeploy-agent/deployment-root/deployment-instructions /deployment-group-id_last_successful_install  

폴더에 존재하던 기존 ApplicationStop 스크립트를 계속 실행하도록 되어 있었습니다.

 

2. DownloadBundle

이 배포 수명 주기 이벤트 중 에이전트는 애플리케이션 수정 파일을 다음 임시 위치로 복사합니다.Windows Server Amazon EC2 인스턴스에 대한 C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive 폴더.DownloadBundle 배포 수명 주기 이벤트 중 실패하는 배포 문제를 해결하려면 실패하고 UnknownError: not opened for reading이 표시되는 DownloadBundle 배포 수명 주기 이벤트 문제 해결 단원을 참조하세요.

이 이벤트는 CodeDeploy 에이전트에 예약되어 있으므로 스크립트 실행에 사용할 수 없습니다.

Amazon Linux, Ubuntu Server 및 RHEL Amazon EC2의 /opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive 폴더

3. BeforeInstall

파일 암호화 해제 및 현재 버전의 백업 만들기와 같은 사전 설치 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

4. install

이 배포 수명 주기 이벤트 중에 CodeDeploy 에이전트는 수정 파일을 임시 위치에서 최종 대상 폴더로 복사합니다. 이 이벤트는 CodeDeploy 에이전트에 예약되어 있으므로 스크립트 실행에 사용할 수 없습니다.

5. AfterInstall

 애플리케이션 구성 또는 파일 권한 변경과 같은 작업에 이 배포 수명 주기 이벤트를 사용할 수 있습니다.

6.  ApplicationStart

ApplicationStop 중에 중지된 서비스를 다시 시작하려면 일반적으로 이 배포 수명 주기 이벤트를 사용합니다.

7.  ValidateService

 마지막 배포 수명 주기 이벤트입니다. 배포가 성공적으로 완료되었는지 확인하는 데 사용됩니다.

 

 

최근 성공한 배포파일 삭제

/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-id_last_successful_install 파일에 최근 성공한 deploy 폴더가 적혀져있고, 이 파일과 파일에 존재하던 파일을 삭제하였습니다.

/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-id_last_successful_install 파일
last_successful_install 파일에 적혀있던 폴더

deployment-group-id_last_successful_install 에 적혀있던 파일에는 최초 배포성공시의 ApplicationStop 시 실행되던 스크립트가 존재하였구 삭제 후 정상적으로 배포되었습니다.