코딩스토리

Codedeploy를 사용한 자동 배포 오류 본문

기타 이슈

Codedeploy를 사용한 자동 배포 오류

kimtaehyun98 2022. 3. 22. 22:12

오류 내용

The deployment failed because a specified file already exists at this location:
/home/ubuntu/app/mentos/src/main/java/MentosServer/mentos/service/MentorProfileService.java

 

발생 상황

GitHub Action -> AWS S3 -> AWS Codedeploy를 사용한 자동 배포 환경을 구축하고 있었다.

 

이때 GitHub Action -> AWS S3 까지는 문제가 없었으나 AWS Codedeploy에서 자꾸 위와 같은 오류로 배포에 실패했다.

 

The deployment failed because a specified file already exists at this location: ~

 

해석해보면 배포를 실패한 이유가 어떤 위치에 있는 파일이 이미 존재하고 있는 파일이기 때문이란 것이다.

 

 

구글링을 해보면 크게 두 가지 해결책을 제시한다.

 

1. appspec.yml에서 beforeInstall 과정에서 수행할 스크립트를 추가한다. (이미 존재하고 있는 파일 삭제 후 진행)

 

2. 파일들을 OVERWRITE 한다.

 

 

1번 과정을 많이 추천하지만 우리 팀은 gitignore 파일들이 존재했기 때문에 전체 파일을 삭제하는 것은 불가능했고(전체 파일 삭제 시 gitignore 때문에 수동으로 작성해놓았던 파일들도 삭제되고, 그렇게 되면 빌드에 실패함)

 

그래서 2번 과정으로 진행하였다.

 

위의 빨간 네모 박스의 코드를 추가함으로써 오류는 잡히는가 싶었지만...

 

 

...?

 

이번엔 Github Action의 workFlow에서 오류가 난다...

 

어디서 나는지 봤더니 Build 부분에서 난다.

로그를 까보는건 참을 수 없지!

다행히 이미 알고 있던 오류였다.

 

 

즉 Secret 파일이 없다는 것인데, Secret 파일은 JWT를 사용할 때 필요한 config 파일이고, 이는 우리 팀이 gitignore을 사용해 실제 배포된 서버에만 올라가 있었다.

 

나는 여기서 딜레마에 빠졌다.

Secret 파일은 올라가면 안 되는데, 없으면 build가 안된다.

뭐 어떻게 하란거지? 라는 굴레에 빠지려는 순간 build를 안 하면 되지 않을까? 란 생각을 했다.

 

workflow에서 무슨 작업을 할 지는 내가 정하는 거니까 build를 건너뛰면 될 것 같다!

(물론 꼼수라고 생각하지만 이 방법 말고는 떠오르지 않았습니다..ㅠ)

 

 

그래서 바로 build 부분을 삭제 후 다시 진행시켜 보니

 

 

 

 

두둥!! 올 성공~!

 

역시 초록색을 보니 기분이 좋네요ㅎㅎ

 

이렇게 해서 직접 EC2 인스턴스에 접속해서 확인해보니 commit 사항이 잘 올라가 있는 것을 확인할 수 있었습니다.

 

이렇게 미루고 미루던 CI/CD 환경을 구축해보았습니다.

 

매번 EC2에 접속해서 재배포 하던 귀찮은 과정이 없어지니 이래서 CI/CD 환경도 중요하구나를 새삼 느꼈습니다!

 

Comments