본문으로 건너뛰기

개념

GitHub Actions로 Docker 이미지를 자동 빌드하고 DockerHub에 푸시하는 워크플로우.

  • main 브랜치 푸시 → latest + stable 태그 생성
  • 릴리즈 발행 → rollback 태그 생성
  • 모든 브랜치 푸시 → latest 태그 업데이트
  • Node.js 패키지 기준으로 작성됨

필요한 Repository Secrets: DOCKER_USERNAME, DOCKER_PASSWORD

.github/workflow/deployment.yml

DOCKER_REPO 환경변수를 자신의 DockerHub 레포지토리로 수정해서 사용

name: AUTO DEPLOYMENT

on:
push:
branches: [ main ]
workflow_dispatch:

# NOTE : DOCKER_REPO 설정.
env:
DOCKER_REPO: organization_name/repository_name

jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master

- name: EXTRACT NPM VERSION
id: extract_version
uses: Saionaro/extract-package-version@v1.0.6
-
name: SETUP QEMUX
uses: docker/setup-qemu-action@v1
-
name: SET UP DOCKERX
uses: docker/setup-buildx-action@v1
-
name: LOGIN TO DOCKERHUB
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Build Docker and Push to DOCEAN_API
id: docker_build
uses: docker/build-push-action@v2
with:
push: true
file: ./Dockerfile
tags: |
"$DOCKER_REPO:latest"
"$DOCKER_REPO:v${{ steps.extract_version.outputs.version }}"
-
name: MAKE RELEASE DATE
id: date
run: echo "release_time=$(TZ=Asia/Seoul date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
-
name: CREATE RELEASE
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.extract_version.outputs.version }}
release_name: Release v${{ steps.extract_version.outputs.version }} [${{ env.release_time }}]
body: AUTO RELEASE MADE FROM workflows
draft: true