본문 바로가기
DevOps/CI CD

[CI/CD] Docker와 Elastic Beanstalk를 사용한 spring boot 프로젝트 CI/CD 자동화 배포1 (삽질 기록)

by 태옹 2022. 1. 27.

0. 첫 CI/CD 구축기...😵🤬😵

삽질.......삽질의 시간.........

처음 CI/CD 파이프라인을 구축해보았는데...... 어떤 단계대로 진행해야 하는지 방법도 모를 뿐더러 자료를 보고 따라해도 수 많은 에러를 만나고.......... 

다행히 여러 방법이 있어서 에러🤯 -> 못고치면 다른 방법으로 시도 -> 에러🤯 -> 다른 방법 시도 -> 에러🤯

이 과정을 반복하다가 결국 굉장히 간단하고도 오류없이 배포할 수 있는 방법을 찾았다!

(더 쉬운게 있으면 말고 쩝🥸)

 

 

1. 사용 기술🛠️

  • spring boot
  • gradle
  • github action
  • docker
  • AWS Elastic Beanstalk

 

 

2. 아키텍처 구성도

우리 프로젝트의 아키텍처 구성은 다음과 같다.

(근데 사실 아직 DB가 안들어가서 이것도 연결해야 함.. 지금은 H2 메모리 DB 사용 중)

 

깃헙 master브랜치에 push하면 자동으로 아래 작업이 진행됨! 

  • 빌드(Build) - 도커가 jar파일 빌드함
  • 테스트(Test) - 깃헙액션에서 테스트 진행
  • 릴리스(Release) - 도커가 이미지 만들어서 도커 허브에 push
  • 배포(Deploy) - 빈즈토크가 도커 허브에서 올린 도커 이미지 pull받아서 배포

 

 

3. 시도한 방법

일단 시도한 방법을 나열하면..

  1. Elastic Beanstalk의 환경 플랫폼을 java로 설정
    • 설정 이유 : spring boot 프로젝트를 빌드한 jar파일을 배포하기 위함
    • 오류 : Elastic Beanstalk 콘솔에서 jar파일 하나만 배포할 때는 문제가 없었는데, github action에서 zip파일을 압축해서 올리려고 하니까 자꾸 deploy error가 남 (오류 해결 못함)
    • https://www.youtube.com/watch?v=ssVQ7OKdXiM 이 영상에서 github + docker + EB로 CI/CD 파이프라인을 만들었길래 따라서 해보는데 하면서도 '응...? 이상하다.. dockerfile을 작성하는 건 알겠는데 이게 EB와 도커가 어떻게 연결이 되는거지...? 도커를 사용하고 있는게 맞나?' 싶은 생각이 들었고, 역시 댓글에서도 아래와 같은 의견이 있었다.
      그래서 이 방법은 따라해서 구축을 했더라도 내가 설명할 수 없는 방법이었다. 어쨌든 이 방법도 에러가 났다.
    • https://jojoldu.tistory.com/549 github action + EB 치면 최상단에 나오는 향로님 블로그도 물론 보긴 했지만 과정이 많으니 어디쯤인가에서 에러를 만나도 뭔지 모르겠고 뭔가 알아야 수정하는 것도 가능한거라..그저 눈물😭 특히 Procfile.ebextensions.platform 파일 세 개 나올 때 에러나길래 아 다른 방법을 찾아야겠다 싶었다. (저기서부터 멘붕옴)
    • 3일간 삽질하다가 때려치고 2번으로 시도함

  2. Elastic Beanstalk의 환경 플랫폼을 Docker로 설정
    • 설정 이유 : 복잡한 java플랫폼 설정에 비해 dockerrun.aws.json 파일 하나만 작성해서 업로드하면 도커 이미지를 다운받아서 컨테이너를 생성할 수 있다고 하길래 시도해봄 (성공)
    • 오류 : 성공하긴 했지만 수많은 에러들이 있었고 지금 생각해보면 거의 포트 문제인 듯...? BucketRegionError도 보긴 했는데 사실 버킷은 문제가 없었고 그냥 dockerrun.aws.json 파일을 잘못 작성한 것 같다. 다시 수정해서 올려보니까 됐음 👀
    • 기존 spring boot 프로젝트에서 github action에서 사용할 .yml파일, dockerfile, dockerrun.aws.json 딱 세 개의 파일만 있으면 쉽게 진행할 수 있다! (docker-compose.yml도 안필요함)

 

 

4. 에러 로그 확인하기

거의 대부분의 에러는 다 빈즈토크에서 생겼는데... 빈즈토크는 이벤트에 먼저 에러 메시지 띄워주고 에러 상세 내용은 따로 로그 메뉴에서 제공한다. 이걸 모르고 있어서 난 아래 메시지가 매번 똑같은 에러인 줄 알았다🥲

Unsuccessful command execution on instance id(s) 'i-0630a5091fbcc8caf'. Aborting the operation.

이벤트 창에 이 에러 메시지 뜨면 아래 순서대로 로그 파일에서 확인하면 됨............

순서대로 진행하면 로그 파일 다운받아짐... 거기서 [ERROR]만 확인하면 됨.....

지금보면 엥? 당연한거 아냐? 해도 진짜 2일차까지도 몰라서 해결 못했음... 그냥 같은 메시지 뜨길래 다 같은 에러인 줄......진짜 모든게 다 삽질......😵

 

 

다음 글에서는 진행한 내용을 소개해보겠다!💁‍♀️

댓글