Code States/TIL

[0424] (페어) 배포 자동화 - 서버 배포 파이프라인

ki1111m2 2023. 4. 24. 22:05

Bare Minimum Requirement

  • AWS 개발자 도구 서비스를 이용해서 배포 자동화 파이프라인을 구축해야 합니다.
    • CodePipeline을 이용해서 각 단계를 연결하는 파이프라인을 구축합니다.
    • Source 단계에서 소스 코드가 저장된 GitHub 리포지토리를 연결합니다.
    • Deploy 단계에서 CodeDeploy 서비스를 이용하여 EC2 인스턴스에 변경 사항을 실시간으로 반영합니다.
  • 나중에 변경 사항을 GitHub 리포지토리에 반영했을 경우, 배포 과정이 자동으로 진행되어야 합니다.
  • 배포 과정에서 오류가 생길 경우, log 파일을 참조하여 문제점을 확인할 수 있어야 합니다.

EC2 태그 및 IAM 역할 부여

생성한 EC2 인스턴스 설정에 들어가 태그를 설정한다

보안 탭에서 IAM 역할을 설정한다

생성된 IAM 역할이 없으므로 생성한다

이번 스프린트를 위해선 총 3개의 권한이 필요하다

권한을 설정한 후 역할 이름을 설정한다

생성된 역할의 신뢰관계를 수정한다

기존엔 ec2만 있었으나 이번 스프린트에선 CodeDeploy도 사용할 것이기 때문에 해당 도메인을 추가한다

다시 EC2로 돌아와 역할 수정을 완료한다

루트 폴더에 appspec.yml 파일을 생성한다

scripts 폴더를 만들어 하위에 실행과 관련된 sh 파일을 추가한다

추가한 파일들을 커밋 푸쉬한다

CodeDeploy로 들어가 애플리케이션을 생성한다

배포 그룹을 생성한다

만들어둔 EC2 태그를 지정한다

로드 밸런싱 활성화를 해제해준다

강의록을 잘못 봐서 이게 체크해야 된다고 생각했다.. 이거때문에 몇시간을 고생했다 ㅠ

CodePipeline으로 들어가 파이프라인을 생성한다

소스 공급자로 GitHub2를 선택하고 연결한다

이번 스프린트에서 빌드는 필요없으므로 건너뛴다

배포 스테이지로는 CodeDeploy를 선택한 후 애플리케이션과 배포 그룹을 설정한다

다 생성되면 파이프라인 구동이 시작된다

소스는 성공하였지만 디플로이에서 오류가 발생했다


트러블 슈팅

로그 파일로 들어가 오류를 확인한다

오류 1: 버전 충돌

아래쪽 로그를 읽어보면 버전 문제인 것을 알 수 있다

npde와 nodejs의 버전을 올려준 후 다시 진행한다

오류 2: The deployment failed because a specified file already exists at this location:

새로운 에러가 발생, CodeDeploy에 접속해 확인한다

이미 존재하는 파일이라는 문구를 볼 수 있다

CodePipeline과 CodeDeploy 자체적으로 파일 덮어쓰기를 할 수 없기 때문에

yml 파일에 파일 덮어쓰기 문장을 추가한다

오류 3: Script at specified location: scripts/start.sh run as user root failed with exit code 1

새로운 에러가 발생, CodeDeploy에 접속해 확인한다

구글링 결과, 권한이 없어 생기는 오류라고 한다

어떤 사용자에게 권한이 부여되어 있는지 확인한다

codedeploy-agent의 상태를 보고, 어디서 불러오는지 확인한다

/etc/init.d/codedeploy-agent 에서 불러오므로 해당 폴더의 권한을 확인한다

확인 결과, root가 아닌 users에게 권한이 있는 것으로 나타난다

codedeploy-agent를 중지하고 권한을 변경한다

users를 모두 root로 바꿔준다

codedeploy-agent를 재실행하고 권한이 제대로 바뀌었는지 확인한다

CodePipeline 재실행 결과 성공한 것을 볼 수 있다


참고 자료

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

https://kimtaehyun98.tistory.com/136

 

오류: Script at specified location: scripts/start.sh run as user root failed with exit code 1

https://countrymouse.tistory.com/entry/awscodedeployerr

 

오류: 버전 충돌

https://velog.io/@kaitlin_k/aws-codepipeline-%EB%B0%B0%ED%8F%AC-%EC%97%90%EB%9F%AC

 

특정 버전 설치 & 최신 버전 설치

https://jjeongil.tistory.com/1275


와 진짜 한 문제로 7시간동안 붙잡고 있을 줄은 몰랐다..

클라이언트 배포 자동화 스크립트를 할 때 까지만 해도 3시간 예정을 30분~1시간 만에 끝내서 이번 스프린트 쉬울 줄 알았는데

어림도 없는 소리였다..

로드밸런싱 활성화 체크를 해야된다고 잘못 봐서 4시간정도 삽질하고

당연히 권한이 root 사용자에게 있을거라고 생각해서 1시간정도 삽질했다

진짜 너무,, 힘들었다,, 원하는 대로 해줬는데 왜안돼,,!!! 

그래도 결국 해결해서 너무 뿌듯하다 진짜 육성으로 소리질렀다 ㅠ ㅠ ,,,

진짜 많은 일이 있었는데 블로그 글에선 표현이 안돼서 너무 슬프다

같이 고민해주신 팀원분들과 은아님 감사 또 감사합니다 .. 🩷