GitHub Action을 이용해 이미지를 DockerHub에 자동 배포

최병훈·2024년 10월 18일
post-thumbnail

1)리눅스에 git 설치

sudo apt install git

2)유저 정보 등록

git config --global user.name bh
git config --global user.email bh@gmail.com

3)소스 코드 작업

  • github에 올릴 코드를 작성: main.go

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        for {
            fmt.Println("Hello World")
            time.Sleep(10 * time.Second)
        }
    }
  • go 프로그램 빌드

    go build main.go
  • go 프로그램 실행 확인

    ./main

4)Dockerfile 작업

  • Dockerfile 생성 및 작성

    FROM golang:1.13-alpine as builder
    RUN apk update && apk add git
    
    WORKDIR /usr/src/app
    COPY . .
    
    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-s' -o main .
    
    FROM scratch
    
    COPY --from=builder /usr/src/app .
    CMD ["/main"]
  • 이미지 생성

    docker build -t goapp:1.0 .
  • 컨테이너 생성 및 실행 확인

    docker run --name goapp-deploy goapp:1.0

5)코드를 저장하기 위한 git hub 작업

  • git hub에서 토큰 발급(한 번 발급받으면 토큰을 다시 보여주지 않음)
  • repository 생성

6)code를 git에 업로드

  • git 초기화

    git init
  • 업로드할 코드 추가

    git add .
  • commit

    git commit -m "cicd"
  • github에 올리기 위해서는 일반적으로 branch를 main으로 수정
    예전에는 github의 기본 브랜치가 master 여서 바로 올리면 되었는데 지금은 main 으로 변경

    git checkout -b main
  • 원격 저장소 연결

    git remote add origin 원격저장소경로
  • 원격 저장소 확인

    git remote -v
  • push

    git push origin main

    이 때 github 아이디와 비밀번호를 물어보는데 비밀번호는 토큰 값을 입력해야 합니다.

7)docker hub 준비(hub.docker.com)

  • repository 생성 : dockercicd
  • token 발급

8)git hub에서 유저 이름 과 token 을 secret 으로 생성

  • DOCKERHUB_TOKEN 과 DOCKERHUB_USERNAME

9)소스 코드가 있는 디렉토리에 .github/workflows 디렉토리를 생성하고 yaml 파일을 만들어서 작성: 파일 이름은 아무거나 상관없음

vi dockercicd.yml
name: "dockercicd"

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set Up GO
        uses: actions/setup-go@v3
        with:
          go-version: 1.15
      - name: Build
        run: go build -v ./..

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: build and release to DockerHUb
        env:
          NAME: ${{ secrets.DOCKERHUB_USERNAME }}
          REPO: dockercicd
        run: |
          docker build -t $REPO .
          docker tag $REPO:latest $NAME/$REPO:latest
          docker push $NAME/$REPO:latest

10)main 브랜치에 push 하여 GitHub Action 동작 확인

git push origin main
  • github repository의 Actions 탭에서 진행 상황을 확인할 수 있다.

11)dockerhub 에 이미지가 push 되었는지 확인

  • GitHub Action을 통해 image가 build 되고, dockerhub에 push 되었다.

0개의 댓글