터칭 데이터

Docker & K8S - Github Actions 사용 # 2 본문

Docker & K8S

Docker & K8S - Github Actions 사용 # 2

터칭 데이터 2023. 12. 19. 23:37

 

학습 목표

 

CI/CD의 개념과 가장 많이 사용되는 소스 컨트롤 시스템

 

Git과 Github에 대해 알아보고 Github이 제공하는 CI/CD 서비스인

 

Github Actions에 대해 알아보려 합니다.

 

 

이렇게 배운 개념들을 바탕으로

1. Github Actions로 Hangman 코드에 테스트를 붙이는 실습

 

2. Github Actions를 기준으로 Docker Image를 만들고 Docker hub에 push하는 실습

 

2개의 실습을 하려합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Github Actions를 기준으로 Docker Image를 만들고 Docker hub에 push하는 실습

 

 

 

 

 

 

 

 

 

 

시작하기 전에

 

먼저 learndataeng/hangman_web repo를 본인의 Github 어카운트로 fork 

여기에 앞서 만든 Dockerfile도 있어야함! 

 

 

지난 실습https://touchingdata.tistory.com/240때 작성한 Dockerfile을 fork한 hangman_web repo에 추가해주세요!

 

 

Github Actions를 통해 main 브랜치에 push나 PR이 있는 경우 Docker Image를 만들고 Docker Hub으로 푸시

하나의 repo에 대해 다수의 workflow들이 존재 가능
모두 .github/workflows/ 밑에 yml 파일 형태로 존재

 

 

 

 

 

 

 

 

 

사용해볼 Template: Docker Image

 

Docker Image이란 Template을 사용할 예정

 

 

 

 

 

 

 

 

 

 

작업 Repo에서 Actions 탭 선택

 

본인의 hangman_web Repo로 이동

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Templates에서 docker image를 검색하고 “Docker image”를 선택

 

 

 

 

 

 

 

 

 

 

 

 

 

Docker 관련 스텝들

 

docker login

이 때 Docker hub ID와 Password를 읽어와야함. 하드코딩하지 않고 Github내에 저장 (뒤에서 더 설명)

    - secrets.DOCKER_USER
    - secrets.DOCKER_PASSWORD

 

docker build

docker push

 

 

=> 위의 과정을 .github/workflows/docker-image.yml에 기술 (steps 밑에 name) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Docker Hub 정보 보관 (1)

 

Docker hub ID와 Password를 Github내에 저장

DOCKER_USER
DOCKER_PASSWORD

 

YML 파일 안에서는 아래로 접근가능

${{secrets.DOCKER_USER}}
${{secrets.DOCKER_PASSWORD}}

 

 

 

 

Settings의 Security 메뉴의 Secrets and variables를 펼치고 Actions를 선택합니다. Secrets에 DOCKER_USER와 DOCKER_PASSWORD 두가지 변수를 저장합니다.

 

 

 

 

 

 

 

 

 

 

 

 

Docker Hub 정보 보관 (2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.github/workflows/docker-image.yml 편집

 

name: Docker Image CI
on:
 push:
 branches: [ "main" ]
 pull_request:
 branches: [ "main" ]
jobs:
 build:
 runs-on: ubuntu-latest

steps:
 - uses: actions/checkout@v3
 - name: docker login
 env:
 DOCKER_USER: ${{secrets.DOCKER_USER}}
 DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
 run: |
 docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
 - name: Build the Docker image
 run: docker build --tag ${{secrets.DOCKER_USER}}/hangman:latest .
 - name: docker push
 run: docker push ${{secrets.DOCKER_USER}}/hangman:latest

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Docker Image Workflow 실행 결과 확인 (1)

 

 

 

 

 

 

 

 

 

 

Docker Image Workflow 실행 결과 확인 (2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Github repo에서 .github/workflows/ 폴더 확인

 

 

테스트가 성공적으로 끝나면 Docker Image 빌드로 넘어가게 하면 사실 이걸 하나로 줄여볼 수 있음.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

실습

 

 

본인의 hangman_web repo의 Actions에서 New workflow를 클릭합니다.

 

 

 

 

 

 

 

 

 

docker image를 클릭한 후 Docker image의 Configure를 클릭합니다.

 

 

 

 

 

 

docker-image.yml

name: Docker Image CI

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

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: docker login
      env:
       DOCKER_USER: ${{secrets.DOCKER_USER}}
       DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
      run: |
         docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
    - name: Build the Docker image
      run: docker build --tag ${{secrets.DOCKER_USER}}/hangman:latest .
    - name: docker push
      run: docker push ${{secrets.DOCKER_USER}}/hangman:latest

 

 

 

 

 

 

 

yaml 파일 수정을 마쳤다면 바로 main branch에 push를 합니다.

 

 

 

 

 

 

 

 

이제 DOCKER_USER와 DOCKER_PASSWORD를 세팅해야 합니다.

 

 

Settings를 클릭합니다.

 

 

 

 

 

 

 

 

 

좌측 메뉴에서 Security > Secret and variables > Actions를 선택합니다.

 

 

 

 

 

 

 

New repository secret을 클릭합니다.

 

기존에 만든 다른 Repository secrets가 존재하면 위와 같이 뜰겁니다.

 

 

 

 

 

 

위와 같이 DOCKER_USER와 DOCKER_PASSWORD 두 번 작업을 해주세요.

 

주의할 점) 만일 여러분이 Docker Hub에 가입할 때 기존의 Gmail이나 Github ID로 가입했다면 

 

 

Docker Hub 홈페이지에서 My Account에 가셔서 Change password를 클릭해 메일로 받은 링크를 통해 패스워드를 바꿔주셔야 DOCKER_USER와 DOCKER_PASSWORD로 입력한대로 정상 로그인됩니다.

 

 

 

 

두번의 작업을 마치면 위와 같이 조회됩니다.

 

 

 

 

 

 

 

 

이제 main 브랜치에 commit이나 push가 실행되면 위와 같이 정상적으로 test들이 실행되고 통과될 것입니다.

 

 

 

Details링크에서 docker-image.yml에 작성된 workflow들이 어떻게 실행됐는지 확인 가능합니다.

 

 

 

 

 

 

Docker Hub의 hangman Repo에 가보니 a few seconds ago라고 뜨며 테스트 중에 정상적으로 Docker Image build와 Docker Hub으로의 push가 이루어진 것을 확인할 수 있습니다.

 

 

 

 

 

참고로 실습으로 진행한 python-app.yaml과 docker-image.yaml 파일 2개를 하나로 만드는 것도 가능합니다. 복습삼아 한번 해보시는 것도 좋습니다.