# 해결 과제
💡 GitHub Action을 이용하여 CI 상에서 Mini node server를 Docker 이미지로 만든 후, 여러분의 Docker Hub에 push하세요
# 실습 자료
sprint-mini-node-server-with-github-action
# 과제 항목별 진행 상황
✏️ CI 상에서 주어진 Dockerfile을 이용해 Docker 이미지를 빌드할 수 있도록, workflow를 새로 만들기
Step 1 : 다음 레퍼런스를 참고해서 Docker 빌드용 GitHub Action workflow를 만드세요. workflow를 추가한다고 해서 GitHub Action이 즉시 작동하지는 않을 것입니다.
sprint-mini-node-server-with-github-action/.github/workflows/docker-build-push.yaml
name: Publish Docker image # 워크플로의 이름
on: # 워크플로가 실행될 이벤트
release: # release 이벤트
types: [published] # 이벤트의 Activity Type
jobs: # 병렬로 실행할 job 을 정의
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest # 호스팅 러너 유형
steps: # 순차로 실행할 step 을 정의
- name: Check out the repo
uses: actions/checkout@v3 # 레파지토리에서 코드를 체크아웃
- name: Log in to Docker Hub
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 # Docker Hub 로그인
with:
username: ${{ secrets.DOCKER_USERNAME }} # 로그인 username - secrets 환경 변수 사용
password: ${{ secrets.DOCKER_PASSWORD }} # 로그인 password - secrets 환경 변수 사용
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 # Git 이벤트에서 메타데이터 추출하여 Docker Image 메타데이터 형태로 변환
with:
images: taekyungoh/mini-node-server # 메타데이터 변환시 사용할 Image
- name: Build and push Docker image
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 # Docker Image Push
with:
context: . # Docker Build context
push: true # Docker Registry Push 여부
tags: ${{ steps.meta.outputs.tags }} # Image Tag - meta step 에서 추출한 tag 사용
labels: ${{ steps.meta.outputs.labels }} # Image Labels - meta step 에서 추출한 labels 사용
Step 2 : repository에서 오른쪽 사이드바를 살펴보면, Release -> Create a new release 링크가 존재합니다. 이 링크를 누르고 새로운 릴리스를 발행합니다. 설정은 다음과 같이 진행합니다.
- Choose a tag: v1.0.0
- Release title 및 Release notes는 여러분이 자유롭게 입력하세요.

Step 3 : Publish release 후에 GitHub Action이 작동하나요?
- 왜 작동이 되는 걸까요? 아까는 왜 안 됐을까요?
❓ Step 1에서 GitHub Action 실행이 되지 않았던 이유 워크플로를 release 이벤트 발생 시 실행되도록 구현했기 때문에, push 이벤트 발생 시에는 실행되지 않음.
✏️ 인증 정보에 대한 환경 변수 생성
Step 1 : 1번 과정을 통해 GitHub Action을 실행하면 그 결과는 실패로 나타날 것입니다. 무엇이 잘못되었는지 먼저 로그를 살펴보세요.
- 왜 실패했을까요? 로그에서 그 이유를 찾아보세요.

❓ GitHub Action 실행이 실패한 이유 워크플로가 secrets 환경변수의 DOCKER_USERNAME 과 DOCKER_PASSWORD 를 참조하고 있지만 환경변수를 생성하지 않았기 때문
Step 2 : Workflow YAML 파일을 자세히 살펴보면, DOCKER_USERNAME 및 DOCKER_PASSWORD라는 환경 변수가 존재합니다. 말 그대로 아이디와 비밀번호와 같은 민감정보를 YAML 코드에 입력해서 git commit 기록으로 남겨둔다면, 더 이상은 그 비밀번호를 사용할 수 없게 될 것입니다.
- GitHub에서는 이러한 환경 변수를 안전하게 보관할 수 있는 기능을 제공합니다. Settings -> Secrets에서 환경 변수를 설정하세요.

✏️ Dockerfile 빌드 결과를 확인하고, Docker Hub에 이미지가 제대로 push 되었는지 확인
Step 1 : 앞서 이 과정을 다 잘 따라왔다면, 여러분 각 개인의 Docker Hub에는 mini-node-server 이미지가 성공적으로 push되어 있을 겁니다. https://hub.docker.com/u/<여러분_아이디>에 들어가서 결과를 확인해 보세요.

# TROUBLE SHOOTING LOG
💡 문제 내용
원인

해결 방안

tags 키값은 github 레파지토리 이름이 아닌 dockerhub의 레파지토리로 생성할 이미지 명으로 설정해야 하므로 위와 같이 수정을 하였다.
# 피드백
오태경 | 박찬규 |
---|---|
지난 스프린트 때 이해하지 못했던 steps: uses 변수에 정의되는 값의 의미를 알 수 있었다. | 이번 기회에 자동화 도구에 대해 관심이 많아 졌고 다른 자동화 도구도 접해야 겠다. |