작성하려는 내용이 제목으로 한 줄 요약하기가 힘드네욥
CD 과정
- git workflow를 통해 actions 실행
- 빌드-배포에 필요한 파일을 zip으로 생성, S3에 적재
- S3에 있는 zip을 이용해 codeDeploy 실행 - appspec.yml으로 codeDeploy 동작
- after-deploy.sh로 파일 install 이후 해야하는 작업 명시
아주 정확하진 않지만 내가 이해한 CD 과정.
기존 상황
- 게임 서버를 InGame/OutGame으로 나누어 구현을 진행
- InGame 서버 구현을 먼저 끝냈고, main 브랜치에 push가 되면 github actions + codeDeploy + ec2를 통해 배포 자동화
추가하려는 것
- OutGame 개발 시작, InGame 서버와 하나의 repository에서 작업 중이며 두 서버는 폴더로 구분했음
- /Server/InGame
- /Server/OutGame
- CD 과정을 추가하려 git workflow를 추가한 상황
- InGame과 OutGame은 다른 인스턴스에 배포하려 함
- branch를 하나 추가해 다음과 같이 동작하게 구현하고 싶음
- main - push => InGame Instance에 배포
- outgame_main - push => OutGame Instance에 배포
발생한 문제
codeDeploy를 이용하려면 appspec.yml이 필수적인데 이미 기존의 appspec.yml이 있어 이름을 다르게 저장해야함.
appspec-auth.yml로 OutGame을 위한 파일을 저장했으나 codeDeploy 배포 과정에서 error 발생!
아래는 이미 에러 로그가 너무 올라가서 아래쪽 로그를 캡쳐해온 것이다...
로그는 /var/log/aws/codedeploy-agent/ 에서 cat codedeploy-agent.log를 실행하면 확인할 수 있다.

위 이미지처럼 에러가 발생했을 때도 에러 코드와 함께 에러 메세지가 출력된다.
내가 봤던 메세지는 codedeploy 폴더에서 appspec.yml을 찾을 수 없다는 내용이었다.
appspec-auth.yml을 갖고 있음에도 해당 에러가 발생했고, 검색한 결과 한 스택오버플로우 글에서 appspec이외의 이름은 사용할 수 없다는 댓글을 봤다...
먼저 해결한 방법부터 알려드리자면 아래와 같다.
# appspec-auth.yml
- name: Rename appspec file
run: mv ./appspec-auth.yml ./appspec.yml
- name: zip file
run: zip -r auth-server.zip ./scripts ./appspec.yml ./.env ./package.json ./AuthServer
일단 사용할 내용을 appspec-auth로 작성한다. 그 다음 Rename 작업을 통해 appspec을 동적 생성해주는 것이다.
빌드 시점에 생성하기 때문에 기존의 appspec에는 영향을 끼치지 않는다.
이후 생성된 appspec.yml으로 zip파일을 구성해주면 끝!
그간 시도했던 방법은...
1차 시도
이때는 appspec 문제였던걸 몰랐던 것 같다.
# appspec.yml
-name: zip file
if: github.ref == 'refs/heads/outgame_main'
run: zip -r auth-server.zip ./scripts ./appspec-auth.yml ./.env ./package.json ./AuthServer
if 조건문을 통해 하나의 workflow에서 동작하게끔 하려고 했다.
2차 시도
이때부터는 appspec 문제임을 알고 있다 ㅋㅋ
# appspec.yml
- name: Start Server with pm2
run: pm2 start AuthServer
appspec과 codeDeploy를 사용하지 않고 직접 실행하도록 작성했다.
이때 pm2 error가 발생해서 아래와 같이 변경하기도 했다.
# appspec.yml
- name: Start Server with pm2
run: node AuthServer.js
두 방법 모두 실패~
3차 시도
# appspec-auth.yml
- name: AWS configure credentials
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name outgame-server
--s3-location bucket=nodejs-build,bundleType=zip,key=outgame/auth-server.zip
--appspec-file ./appspec-auth.yml
특정 파일을 지정해주어 이 파일을 appspec으로 사용할 수 있게 명시적으로 지정하는 방식이다.
codeDeploy에 appspec-file이라는 명령어가 없다며 동작하지 않았다...
4차 시도
# after-deploy-auth.sh
files:
- source: /
destination: /home/ubuntu/build
- source: /appspec-auth.yml
destination: /home/ubuntu/build/appspec.yml
appspec-auth를 appspec으로 저장하게 설정해봤다.
5차 시도 - 해결
뭔가 많이도 했다. 반나절 정도 시간을 쓴 것 같다...그래도 됐으니 만족!
log로 에러 코드를 확인하는게 가장 정확한 문제 진단 방법인 것 같다. 같은 에러 코드여서 메세지가 각기 다르다.
나와 같은 메세지가 발생한 블로그를 하나도 못 봤다...
이번에는 에러 확인 - 문제 진단 - 블로그에 있던 방법 총동원 - 나름의 방법 생각 - gpt한테 코드 물어보기
요론 과정으로 해결했다...
'나만무' 카테고리의 다른 글
나만무 : Sleighers 프로젝트 소개 및 정리 (0) | 2024.06.08 |
---|---|
4주 간의 트러블 슈팅 모음 (0) | 2024.06.08 |
[EC2 + RDS] EC2 터미널에서 node.js 서버 실행하기 (0) | 2024.05.08 |