프로필사진
[CI/CD적용기2] Docker + Github Actions으로 배포 자동화

2023. 9. 7. 22:19🔴 ETC/CICD

300x250

목표 :
- Github Actions를 사용하여 CI/CD를 구축한다
- workflow :
   - build my project -> login to my Docker hub -> build and push my Image
- 즉, 빌드한 결과물을 Docker Image로 만들어서 내 Docker Hub으로 push 하는 일련의 작업을 자동화한다.
  (https://kkangdda.tistory.com/121 > 기존에 직접 손으로 했던 내용을 Github Action으로 자동화)


1. Github Action workflow yml파일 생성

자신의 repository > Actions > set up a workflow yourself 를 누르면 .github/workflow 하위에 yml 파일을 작성할 수 있다.
 

- workflow : 가장 상위 개념 = 자동화 작업 과정
- job : 독립된 환경에서 실행되는 작업들의 묶음
  - 하나의 workflow 안에서 job 단위로 완전히 격리된 환경(가상머신 또는 컨테이너)에서 실행됨
     - 병렬처리 가능해짐 -> 성능 올라감
     - 여러 실행환경에서 실행할 수 있음 (ex. 리눅스, 윈도우즈)
(job을 설정하는 부분은 이 포스트 참고 : https://www.daleseo.com/github-actions-jobs/)
- step : 하나의 job 안에서 순차적으로 실행되는 단계
- action : 작업 공유 메커니즘, Github Marketplace에서 다양한 action을 사용할 수 있음
 
내가 작성한 github-action.yml

name: WORKFLOW_FOR_DOCKER

on:
  push:
    branches: [ "main" ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  # 1. 빌드 머신 준비
  build:
    runs-on: ubuntu-latest

    steps:
      # 2. 빌드 머신에 Repository Check Out
      - uses: actions/checkout@v3

      - name: Start Actions
        run: echo Start Actions!

      # 3. Docker Meta를 이용하여 생성할 이미지의 이름과 버전 정보 태깅 
      - name: Docker meta
        id: docker_meta
        uses: crazy-max/ghaction-docker-meta@v1
        with:
          images: iDaeun/daeun-portfolio-app
          tag-semver: |
            {{version}}
            {{major}}.{{minor}}

      # 4. 빌드 머신에 Docker 빌드에 필요한 사항 준비
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
        
      # 5. 이미지를 업로드 할 내 도커허브 로그인
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
          
      # 6. 도커 이미지 빌드하고 허브로 푸쉬
      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          push: true
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}

      - name: Finish Git Actions
        run: |
          echo Finished All Actions 🥳
          echo Please Check Your Docker Hub!

 

2. 필요한 Secret 등록

Docker Hub에 이미지를 push 해야 하기 때문에 로그인할 때 필요한 내용을 아래와 같이 Secret으로 등록해줘야 한다.

등록된 Secret Key로 Github Action workflow yml 내에서 참조하여 사용한다.

username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

 

3. Docker에 관련된 파일은 이전 포스트 참고

2023.09.07 - [🔴 ETC/CICD] - [CI/CD적용기1] React앱을 Docker Image으로 생성 후 Docker hub에 업로드

 

[CI/CD적용기1] React앱을 Docker Image으로 생성 후 Docker hub에 업로드

목표: - 어플리케이션을 빌드한 결과물을 Docker Image로 만든다. - Docker Image를 내 Docker Hub repository에 올린다. - 로컬 pc에서 Docker Hub에 올린 Image를 pull 받아서 실행한다. 1. React 앱 생성 (create-react-app)

kkangdda.tistory.com

 

4.  Run Github Actions !

main 브랜치에 코드를 푸쉬하면 Github Action이 yml 파일에 정의한 작업내용에 따라 실행된다.
먼저 프로젝트를 빌드해 놓은 뒤 main 브랜치에 강제로 test 코드를 푸쉬하여 Github Action이 시작되도록 하였다.

steps 내에서 내가 정의한 작업 name들을 확인할 수 있다.
작업들이 끝난 뒤, docker hub으로 가면 내가 빌드한 프로젝트가 Docker Image로 빌드되어 올라간 걸 확인할 수 있다.
로컬에서 해당 Docker Image를 pull 받아 띄워보는 것까지 끝!

300x250