[Github Actions] 간단하게 CI/CD 구현해보기 - 2

Suntory·2022년 7월 20일
0

CI/CD

목록 보기
2/2

개요

지난 포스팅에서 Github Actions를 통해 지정된 브랜치에 push 되는 경우에 빌드하여 jar 파일을 만드는 과정까지 진행했습니다.
이번에는 jar 파일을 docker image로 만들고, dockerhub에 push하는 과정까지 해보겠습니다!

Dockerfile 작성하기

FROM adoptopenjdk/openjdk11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]

먼저 도커 이미지를 생성할 때 실행할 명령어들을 dockerfile에 정의해야 합니다. 프로젝트 루트 경로에 Dockerfile이란 이름으로 위의 내용을 작성해줍니다.

먼저 우리 프로젝트의 jdk버전인 11로 명시해주고, 이미지로 만들 jar 파일의 경로를 적어줍니다. /build/libs에 jar 파일이 존재하므로 해당 경로를 적어줍니다.

이 때, *.jar로 표기하기 위해서는 빌드한 결과로 plain jar가 생성되는 것을 막아야 합니다.

build.gradle에 다음 옵션을 추가해줍니다.

jar {
    enabled = false
}

그 다음 COPY 명령을 통해 app.jar 파일로 만들고, entry point로 java -jar 명령을 적어 컨테이너 실행 시 jar 파일을 실행하도록 만들어줍니다.

Dockerhub 로그인

Docker image를 만들어 docker hub에 올린 뒤 서버에서 pull 받아 실행시키는 방식으로 동작하게 하려고 합니다.

그러기 위해서 먼저 github actions에 Dockerhub에 로그인하는 명령어를 작성합니다.

- name: Docker Login
  uses: docker/login-action@v2.0.0
  with:
    username: ${{ secrets.DOCKERHUB_USERNAME }}
    password: ${{ secrets.DOCKERHUB_SECRET }}

action으로는 docker/login-action을 사용했습니다. argument로 dockerhub 계정과 비밀번호를 입력해야 하는데, 보안을 위해 repository secret으로 등록해줍니다.

그리고 환경변수처럼 가져와 로그인을 진행합니다.

Docker로 빌드하기

- name: Docker build
        run: |
          docker build -t issue-tracker .
          docker tag issue-tracker ${{ secrets.DOCKERHUB_USERNAME }}/issue-tracker:latest
          docker push ${{ secrets.DOCKERHUB_USERNAME }}/issue-tracker:latest

이제 github action에 docker image를 만드는 명령어를 추가해줍니다.
이미지를 만들고 태그를 붙인 뒤 dockerhub에 push합니다.

dockerhub에 접속해보면 위와 같이 image가 push된 것을 확인할 수 있습니다.
이제 다음 단계로 서버에 접속하여 docker image를 받아 실행함으로써 자동 배포를 완성해보겠습니다!

profile
천천히, 하지만 꾸준히 그리고 열심히

0개의 댓글