본문 바로가기
AWS

[CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [3] - Multi Module Project

by kiwi_wiki 2022. 9. 18.

- [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [1]
- [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [2] - HTTPS

 

Multi Module Project + Docker 플랫폼 배포 설정

 

 

Pipeline 

AWS EB 플랫폼을 Docker로 선택했으니 이제 해당 환경으로 작업을 하려 한다.

 

먼저 구축하려 하는 CI/CD 파이프라인

 

Github Action을 통해 Repostiroy의 소스를 Checkout 후

DockerHub에 Checkout 받은 소스를 작성한 Dockerfile 기반으로 빌드하여 이미지를 업로드하고

작성한 docker-compose.yml을 통해 AWS EB에 배포할 것이다.

 

DockerHub

먼저 계정이 없다면 생성해주자.

로그인 후 Account Settings > Security 메뉴에 들어가 New Access Token 버튼을 눌러 Access Token을 만들어준다.

액세스 토큰 description 은 자유롭게 작성하면 된다. 이때 발급되는 access token 값을 잘 기록해두자.

 

Kotlin + SpringBoot Dockerfile

이 글의 경우 작성된 프로젝트는 코틀린(JVM 17) + 스프링 부트로 구성된 Multi Module Product 구조이다.

다른 모듈과 빌드해야 할 내용이 다를 수 있으니 Dockerfile을 모듈별로 작성했다. (admin.Dockerfile, api.Dockerfile)

 

아래는 예시일 뿐 각자 자신의 프로젝트에 맞게 작성하면 된다.

# api.Dockerfile

FROM azul/zulu-openjdk-alpine:17 as builder
WORKDIR /app
COPY build.gradle.kts settings.gradle.kts gradle.properties gradlew ./
COPY ./gradle ./gradle
COPY ./test-api ./test-api
RUN chmod +x ./gradlew
RUN ./gradlew :test-api:clean :test-api:installBootDist

FROM azul/zulu-openjdk-alpine:17-jre
WORKDIR /app/bin
RUN apk add --no-cache fontconfig ttf-dejavu
COPY --from=builder /app/test-api/build/install/test-api-boot /app
EXPOSE 8081
ENTRYPOINT ["./test-api"]

Docker Compose

AWS EB Docker 플랫폼 사용 시 배포 방법이 2가지 있는데

docker-compose.yml를 사용하는 것과 Docker Compose를 사용하지 않는 경우 대신 Dockerrun.aws.json 파일을 사용하는 경우가 있다.

이 글의 경우 docker compose를 사용할 예정이다.

# docker-compose.yml

version: "3.9"
services:
  test-api-server:
    image: "username/repository:tag"
    ports:
      - "80:8081"
    restart: "always"

DockerHub에 업로드되어있는 이미지를 가져와서 쓸 것이므로

image 정보 입력 부분에

{{도커 허브 계정 이름}} / {{이미지 업로드 저장소 이름}} : {{태그}}

양식으로 작성한다.

 

 

더보기

뻘짓 기록

 

Dockerfile에서 EXPOSE 8081로 했는데 docker-compose.yml 에서 ports:  "80:8080"으로 하는 바람에

배포 후 접속했을 때 502 에러가 발생했었다.

내가 작성한 설정을 잘 보고 맞춰주자....

 

 

이러면 도커 관련 설정도 완료됐다.

 

다음은 마지막으로 Github Action을 이용해 빌드부터 배포까지 하는 작업을 해 볼 것이다.

728x90
반응형