터칭 데이터
Docker & K8S - Github Actions 사용 # 2 본문
학습 목표
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개를 하나로 만드는 것도 가능합니다. 복습삼아 한번 해보시는 것도 좋습니다.
'Docker & K8S' 카테고리의 다른 글
Docker & K8S - Docker Volume이란 (0) | 2023.12.20 |
---|---|
Docker & K8S - Docker 명령 정리 (0) | 2023.12.20 |
Docker & K8S - Github Actions 사용 # 1 (0) | 2023.12.19 |
Docker & K8S - Github Actions 소개 (0) | 2023.12.19 |
Docker & K8S - Git과 Github 소개 (0) | 2023.12.19 |