IT STUDY LOG

Sprint - 환경 변수 분리 본문

devops bootcamp 4/pair/team log

Sprint - 환경 변수 분리

roheerumi 2023. 4. 21. 11:16

#해결 과제

💡 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 링크가 존재, 이 링크를 누르고 새로운 릴리스를 발행

설정 내용

  1. Choose a tag: v1.0.0
  2. 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

 

워크플로를 트리거하는 이벤트 - GitHub Docs

GitHub에 대한 특정 작업이 예약된 시간에 발생하거나 GitHub 외부의 이벤트가 발생할 때 실행되도록 워크플로를 구성할 수 있습니다.

docs.github.com

https://docs.github.com/ko/actions/using-jobs/using-jobs-in-a-workflow

 

Manage repositories

 

docs.docker.com

https://docs.github.com/ko/actions/learn-github-actions/finding-and-customizing-actions#using-shas

 

작업 찾기 및 사용자 지정 - GitHub Docs

작업은 워크플로를 구동하는 구성 요소입니다. 워크플로는 커뮤니티에서 만든 작업을 포함할 수 있으며 애플리케이션의 리포지토리 내에서 직접 고유한 작업을 만들 수도 있습니다. 이 가이드

docs.github.com

https://docs.github.com/ko/actions/security-guides/encrypted-secrets

 

암호화된 비밀 - GitHub Docs

암호화된 비밀 정보 비밀은 organization, 리포지토리 또는 리포지토리 환경에서 만드는 암호화된 변수입니다. 만든 비밀은 GitHub Actions 워크플로에서 사용할 수 있습니다. GitHub는 libsodium 봉인 상자

docs.github.com

https://docs.github.com/ko/webhooks-and-events/webhooks/webhook-events-and-payloads#release

 

웹후크 이벤트 및 페이로드 - GitHub Docs

When configuring a webhook, you can use the UI or API to choose which events will send you payloads. Only subscribing to the specific events you plan on handling limits the number of HTTP requests to your server. You can also subscribe to all current and f

docs.github.com

https://docs.github.com/ko/repositories/releasing-projects-on-github/about-releases

 

릴리스 정보 - GitHub Docs

릴리스를 만들어서 다른 사용자가 사용할 수 있도록 소프트웨어와 함께 릴리스 정보, 이진 파일에 대한 링크를 패키지할 수 있습니다.

docs.github.com

https://docs.github.com/ko/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images

 

컨테이너 레지스트리 작업 - GitHub Docs

About the Container registry The Container registry stores container images within your organization or personal account, and allows you to associate an image with a repository. You can choose whether to inherit permissions from a repository, or set granul

docs.github.com

https://docs.docker.com/docker-hub/repos/#pushing-a-docker-container-image-to-docker-hub

 

Manage repositories

 

docs.docker.com

 

Comments