본문 바로가기

세미나

Github Actions을 통한 Docker이미지 자동 배포

728x90

안녕하세요. 유저인사이트 이현준입니다.

 

이번 시간에는 Github의 Actions기능을 사용하여 프로젝트의 Docker이미지를 자동으로 생성하고 배포하는 작업을 해보려고 합니다.

 


목차

1. Github Actions란?

2. Workflow란?

3. Workflow 정의

4. Workflow 동작 확인

 


 

 

1. Github Actions란?

Github Actions은 Github에서 제공하는 CI/CD서비스 입니다. 

CI (Continuous Integration, 지속 통합)란 소프트웨어 개발 단계의 병합을 자동화 하는 것을 말하며,

CD(Continuous Deployment, 지속 배포)는 개발한 소프트웨어를 자동으로 배포하는 것을 말합니다.

 

Github Actions을 사용하면 Github에 등록된 프로젝트에 대해 특정 이벤트가 발생했을 때의 트리거나, 특정 시간이나 주기에 동작하는 스케줄링 작업 등을 설정 할 수 있습니다.

이 글에서는 Github의 main branch에 Merge 되었을 때, 자동으로 Docker이미지를 생성하고, 생성된 이미지를 Docker Hub에 자동으로 배포하는 작업을 수행합니다.

 

2. Workflow란?

Workflow는 Github Actions에서 관리하는 자동화 프로세스 입니다.

Workflow는 .github/workflows 디렉토리에서 yaml파일로 관리되며, yaml파일에는 해당 저장소의 특정 이벤트에 대한 트리거나 일정에 따른 작업등이 정의되어 있습니다.

 

 

3. Workflow 정의

우선 Docker이미지를 생성하고 Docker Hub에 자동으로 배포하는 Workflow의 전체적인 코드를 살펴 본 후, 각각의 속성에 대해 살펴보도록 하겠습니다.

 

name: Docker CD
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Spring Build
        run: mvn package

      - name: Docker Image Build
        run: docker build --build-arg JAR_FILE=target/*.jar --tag hjlee4/myapp .

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

      - name: Docker Hub Push
        run: docker push hjlee4/myapp

 

다음은 각각의 속성에 대해 살펴보도록 하겠습니다.

on:
   push:
       branches: [main]
Workflow의 트리거를 지정합니다.

이 예제에서는 push이벤트를 사용하므로 저장소의 main branch에 변경 사항이 푸시되거나 병합될 때마다 Workflow실행이 트리거됩니다.
jobs:
   deploy:
Workflow에서 수행 될 모든 작업을 정의합니다.

이 예제에서는 deploy라는 이름의 작업을 하나만 정의하였습니다.
runs-on: ubuntu-latest 해당 작업이 수행 될 환경을 정의합니다.

Workflow의 작업은 Github에서 호스팅하는 가상머신에서 실행되며, 이 예제에서는 가상머신의 ubuntu OS에서 수행됩니다.
steps: 작업 에서 실행되는 모든 단계를 정의합니다.
uses: 정의된 Action을 수행합니다.

Action은 Github Actions에서 자주 사용되는 작업의 단위로, 공개 코드 저장소를 통해 공유 할 수 있습니다.
이 예제에서는 jdk를 설정하거나 docker에 로그인 하는 Action을 사용하였습니다.
with: Action을 수행하는 데 필요한 파라미터를 정의합니다.
run: 수행할 스크립트를 정의합니다.

 

 

4. Workflow 동작 확인

정의한 Workflow가 제대로 동작하는지는 Github의 Actions탭에서 확인 할 수 있습니다.

workflow 동작 확인

 

 

Workflow가 오류 없이 동작하였으니, 실제로 Docker Hub에 자동으로 배포되었는지를 확인해보겠습니다.

docker hub에 배포된 이미지

 

 

이 글에서는 Github Actions의 개념에 대하여 알아보았고, 이를 활용하여 프로젝트를 자동으로 배포하는 작업을 수행해 보았습니다.

이상으로 글을 마치도록 하겠습니다.

감사합니다.

 

728x90