IT STUDY LOG
Sprint - 환경 변수 분리 본문
#해결 과제
💡 GitHub Action을 이용하여 CI 상에서 Mini node server를 Docker 이미지로 만든 후, 여러분의 Docker Hub에 push하세요.
#실습 자료
레파지토리 : Repository 주소
#과제 항목별 진행 상황
✏️ CI 상에서 주어진 Dockerfile을 이용해 Docker 이미지를 빌드할 수 있도록, workflow를 새로 만들기
Step 1 : 다음 레퍼런스를 참고해서 Docker 빌드용 GitHub Action workflow 생성 (workflow를 추가한다고 해서 GitHub Action이 즉시 작동하지는 않을 것)
# workflow의 이름
name: build & push docker image
on:
# 릴리스는 배포 가능한 소프트웨어 반복으로, 패키지 하여 더 많은 사용자가 다운로드, 사용 가능
# 리포지토리 기록의 특정 지점을 표시하는 git tag기반으로 생성
release: #릴리즈 작업 발생 시 워크플로 실행
types: [published]
jobs:
build_and_push_docker_image: # job_id : 고유 식별자
runs-on: ubuntu-latest
steps:
- name: "1. github runner에 레파지토리 체크아웃"
uses: actions/checkout@v3
# https://github.com/docker/login-action
- name: "2. 도커 허브에 로그인"
# @ 이후 값은 SHA를 사용하는 버전
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
# 레파지토리 setting에서 secret 설정
# https://docs.github.com/ko/actions/security-guides/encrypted-secrets
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
#https://github.com/docker/metadata-action
- name: "3. 도커 이미지에 메타 데이터 만들기"
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ohrory218/githubaction-ci
# https://github.com/docker/build-push-action
- name: "4. 도커 이미지 Build & Push"
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
# 3번 스텝의 id: meta에서 만들어진 outputs 객체의 tags, labels
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.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이 작동하는지? 그렇지 않으면 이유는 무엇일지?
- workflow 트리거에 release, published로 이벤트를 작성했기 때문에 실제로 릴리즈가 이루어졌을 때 GitHub Action이 작동
✏️ 인증 정보에 대한 환경 변수 생성
Step 1 : 1번 과정을 통해 GitHub Action 실행 후 실패한다면 로그 분석해서 원인 파악
- Username과 Password가 입력되지 않아 로그인 실패
Step 2 : Workflow YAML 파일을 자세히 살펴보면, DOCKER_USERNAME 및 DOCKER_PASSWORD라는 환경 변수가 존재(아이디와 비밀번호와 같은 민감정보를 YAML 코드에 입력해서 git commit 기록으로 남겨두는 것은 보안상 취약)
- GitHub에서는 이러한 환경 변수를 안전하게 보관할 수 있는 기능을 제공
- Settings -> Secrets에서 환경 변수 설정
✏️ Dockerfile 빌드 결과를 확인하고, Docker Hub에 이미지가 제대로 push 되었는지 확인
Step 1 : 다시 한 번 릴리즈 진행
Step 2 : Actions 탭에서 제대로 수행되었는지 확인
Step 3 : 개인의 Docker Hub에 mini-node-server 이미지가 성공적으로 push되어 있는지 https://hub.docker.com/u/<사용자_아이디>에서 확인
#References
https://docs.github.com/ko/actions/using-workflows/events-that-trigger-workflows#release
https://docs.github.com/ko/actions/using-jobs/using-jobs-in-a-workflow
https://docs.github.com/ko/actions/learn-github-actions/finding-and-customizing-actions#using-shas
https://docs.github.com/ko/actions/security-guides/encrypted-secrets
https://docs.github.com/ko/webhooks-and-events/webhooks/webhook-events-and-payloads#release
https://docs.github.com/ko/repositories/releasing-projects-on-github/about-releases
https://docs.github.com/ko/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images
https://docs.docker.com/docker-hub/repos/#pushing-a-docker-container-image-to-docker-hub
'devops bootcamp 4 > pair/team log' 카테고리의 다른 글
Sprint - 서버 배포 파이프라인 (0) | 2023.04.24 |
---|---|
Sprint - 클라이언트 배포 파이프라인 (0) | 2023.04.24 |
Sprint - 빌드 및 테스트 자동화 (1) | 2023.04.20 |
Sprint - 도메인 연결과 CDN 및 HTTPS 적용 (0) | 2023.04.19 |
Sprint - 3 Tier 아키텍처 배포 (0) | 2023.04.17 |