본문 바로가기
Programming

CI/CD #3 배포 구성하기 Github Actions

by 개발자 염상진 2022. 12. 29.

 

 

 

 

 

 

 

이전글

CI/CD #1 배포 구성하기 Node.js 빌드

CI/CD #2 배포 구성하기 Dockerfile

 

CI/CD 구성 Github Actions

 

Github Actions은 개발자들의 놀이터라고 불리는 Git에서 제공하는 pipeline 서비스입니다. 개발이 완료된 소스코드를 빌드 -> 테스트 -> 배포까지 한번에 관리할 수 있어 효율적인 배포 환경을 구성할 수 있습니다.

💡여기서 빌드/테스트를 CI라고 하고, 배포를 CD라고 합니다.

 

Github token 생성

 

CI/CD를 구성하기 위해서는 토큰이 필요합니다. 

이전 콘텐츠에서 소스코드를 업로드한 github repository로 이동합니다.

 

 

 

 

 

 

전체 메뉴에서 settings로 이동합니다.

 

왼쪽 하단에서 Settings->Developer settings로 접속합니다.

왼쪽 메뉴에서 Personal access tokens->Tokens(classics)를 클릭합니다.

우측 상단에 Generate new token을 클릭하고 Generate new token(classics)를 선택합니다.

 

Github 로그인을 다시 진행합니다.

 

token을 설명할 수 있는 이름을 지정합니다. 보기 편한 네이밍을 해주시면 됩니다.

 

 

 

 

 

 

유효기간을 설정해줍니다. 프로젝트에 따라 다르겠지만 기간은 임의로 선택할 수 있습니다.

 

token의 권한을 지정합니다. CI/CD를 구성하기 위해서는 최소 아래 3개의 권한이 필요합니다. 

 

토큰을 생성해줍니다.

 

토큰이 정상적으로 생성되었습니다.

⚠️ 생성된 토큰은 꼭 복사해두세요.

 

Github token 등록

 

소스 코드를 업로드했던 Repository로 이동합니다.

상단 메뉴에서 Settings을 클릭합니다.

 

 

 

 

 

 

 

왼쪽 하단의 Secrets -> Actions을 선택합니다.

New repository secret을 클릭해서 해당 레포의 Action secret을 생성합니다.

방금전 생성한 토큰을 삽입합니다.

 

이제 Actions Secret이 생성되었습니다. 

 

Gihub Actions workflow 생성

 

상단 메뉴에서 Actions를 선택합니다.

 

아직 생성된 Github Actions workflow가 없습니다.

set up a workflow yourself를 클릭해서 새로운 workflow를 생성합니다.

 

yml 파일을 편집할 수 있는 공간이 나옵니다.

 

 

 

 

workflow.yml 파일은 Docker hub와 같은 Github Container Registry(GHCR)을 이용해 docker 이미지를 빌드하고 push합니다. 또한 배포 환경에서 이미지를 다운로드하여 실행 해주는 역할을 담당합니다.

 

yml 파일을 아래 코드로 작성합니다.

name: CI/CD Docker

# 트리거를 셋팅합니다.
on:
  push:
  	# main 브랜치에서 push가 되었을 때 작동합니다.
    branches: [main]

# 도커 이미지 관련 설정
env:
  DOCKER_IMAGE: ghcr.io/${{ github.actor }}/docker-ec2-node-deploy
  VERSION: ${{ github.sha }}
  NAME: go_cicd

# 작업 설정
jobs:
  # build 작업에 관한 설정입니다.
  build:
    name: Build
    # ubuntu 환경에서 실행됩니다.
    runs-on: ubuntu-latest
    # step에 따라 아래 과정이 수행됩니다.
    steps:
      # github repository에서 checkout
      - uses: actions/checkout@v2
      # docker build 수행
      - name: Set up docker buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
      - name: Cache docker layers
        uses: actions/cache@v2
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-${{ env.VERSION }}
          restore-keys: |
            ${{ runner.os }}-buildx-
      # GitHub 컨테이너 레지스트리에 로그인 후 빌드 & 푸시
      - name: Login to ghcr
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_TOKEN }}
      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          builder: ${{ steps.buildx.outputs.name }}
          push: true
          tags: ${{ env.DOCKER_IMAGE }}:latest
  # 배포 Job
  deploy:
    # build 후에 실행되도록 정의
    needs: build 
    name: Deploy
    # AWS ./configure에서 사용할 label명
    runs-on: [self-hosted] 
    steps:
      - name: Login to ghcr
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GHCR_TOKEN }}
      # docker image를 실행합니다.
      # 80 포트로 접속하면 이미지 내의 9901 포트로 접속합니다.
      - name: Docker run
        run: |
          docker stop ${{ env.NAME }} && docker rm ${{ env.NAME }} && docker rmi ${{ env.DOCKER_IMAGE }}:latest
          docker run -d -p 80:9901 --name go_cicd --restart always ${{ env.DOCKER_IMAGE }}:latest
🔨 Reference

Github Actions workflow Syntax
workflow.yml 설명

 

Github Actions을 위한 Github 셋팅이 완료되었습니다.

이제 Amazon Web Service(AWS)에서 EC2 설정만 해주면 됩니다.

다음 콘텐츠에서는 AWS EC2 설정 방법에 대해 알아보겠습니다.

 

 

정리

 

이번 콘텐츠에서는 CI/CD를 위한 Github Actions 설정에 대해 알아보았습니다.

Github에서 발급해주는 token을 생성해서 repository에 새로운 secret을 생성해야 합니다.

마지막으로 workflow.yml를 작성해서 CI/CD flow을 제작할 수 있습니다.

위의 예제에는 build, deploy 2단계만 들어있지만 Test를 삽입하여 3단계의 파이프라인을 구성할 수도 있습니다.

 

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

 

댓글