Github Action을 이용한 자동 DockerHub 배포 시스템
포스트
취소

Github Action을 이용한 자동 DockerHub 배포 시스템

개요

동아리방에 있는 공유기의 포트포워딩이 자주 변경이 되기 때문에 매번 원격 접속 해서 Iptime 공유기에 접속하여 포트포워딩 하는 것은 비효율적이라 생각하여 사용하기 쉽게 하기 위해서 RestAPI 형식으로 제공 하고자 하였다.

하지만 한번 시스템을 배포하고 난 뒤에 시스템을 업그레이드를 하거나, 마이그레이션 하기가 어렵기 때문에 Docker의 이미지로 제공 하고자 하였다. 로컬에서 이미지를 빌드해서 올리는 로컬 시스템에 배포만 한다면 문제가 발생하지 않지만, 다른 시스템 시스템에 배포를 한다면 외부 도커 이미지 저장소가 따로 있어야 했었고, 코드를 작업 한 것을 자동적으로 도커 이미지 저장소에 배포가 가능해야 했었다.

동작

  1. 코드를 작성 한 뒤 Github에 커밋을 한다.
  2. 해당 커밋에 Tag를 단다. 예) v1.0.0
  3. Tag 추가가 되면 발생 되는 workflow가 실행 된다.
  4. Github Action에서 Dockerfile을 빌드 한다.
  5. 도커 이미지를 Dockerhub에 업로드 한다.

Github Action Workflow 명령어

코드는 해당 사이트를 참조 하여 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
name: Docker Image CI

on:
  push:
    tags:
      - '**'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        name: Checkout
        
      - uses: crazy-max/ghaction-docker-meta@v1
        name: Docker meta
        id: docker_meta
        with:
          images: aoikazto/iptime-n104t
          tag-semver: |
            { {version} }
            { {major} }.{ {minor} }
      - uses: docker/setup-buildx-action@v1
        name: Set up Docker Buildx
        
      - uses: docker/login-action@v1
        name: Login to DockerHub
        with:
          username: ${ { secrets.DOCKER_USERNAME } }
          password: ${ { secrets.DOCKER_TOKEN } }
      - uses: docker/build-push-action@v2
        name: Build and push
        with:
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          push: true
          tags: ${ { steps.docker_meta.outputs.tags } }
          labels: ${ { steps.docker_meta.outputs.labels } }

결과

깃허브에서 태그를 달면 v1.1.0 하게 될 경우 v1.1 과 v1.1.0 두개의 마이너와 버그 픽스 버전이 만들어 진다.

자세한 결과는 아래의 결과에서 확인이 가능하다.

도커 허브 Iptime-N104T

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

ERP 시스템에 적용할 JWT 인증 기법

Kubernetes에 NFS로 데이터 공유 시스템 구성