github action을 이용한 CD 적용 방법

이주영·2022년 12월 22일
0
post-thumbnail

CI/CD란?

CI/CD는 개발 과정에서 필요한 빌드, 테스트, 배포등의 과정을 자동화하는 것이다. CI/CD 자동화를 통해서 개발자들은 코드를 자동으로 테스트하고 배포할 수 있고 이를 통해 효율적인 작업과, 더 빠르고 더 자주 배포를 진행할 수 있게 돼 베포하는 시간을 절약해서 개발자의 한정적인 자원을 더욱 적절한 곳에 사용할 수 있게 해준다.

CI / CD 플랫폼의 종류

CI/CD 플랫폼의 종류를 구분하자면 크게 두가지,설치형클라우드형으로 나눌 수 있다.

설치형은 파이프라인을 구축하는 개발자가 직접 특정 컴퓨터에 CI/CD 플랫폼을 설치해서 활용하는 방법이며 대표적인 설치형 CI/CD 플랫폼으로는 Jenkins가 있다.

반대로 클라우드형같은 경우에는 CI/CD 플랫폼을 운영할 컴퓨터를 개발자가 직접 관리할 필요 없이 서비스 제공자가 클라우드에서 모두 운영해주는 형태인데 클라우드형 CI/CD 플랫폼을 이용하면 별도의 컴퓨팅 자원에 대한 관리 없이 CI/CD 파이프라인의 구축에만 신경 쓸 수 있다. 하지만, 컴퓨터에 직접 접근할 수 없고 플랫폼에서 제공해주는 수준까지만 할 수 있기에 세부적인 조정이 불가능하다는 단점이 있다. 대표적인 클라우드형 CI/CD 플랫폼의 예시로는 Travis CI, GitHub Actions 등이 있습니다.

GitHub Actions의 구성요소들

출처: https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions

  1. Workflow
    • GitHub Actions상에서 실행될 자동화된 일련의 작업 흐름을 의미합니다. YAML 형식의 파일을 통해서 Workflow를 설정할 수 있습니다.
    • 레파지토리 안에서 발생하는 이벤트나 예약된 스케줄에 의해서 실행될 수 있으며, 직접 수동으로 실행하는 것 또한 허용됩니다.

  2. Event
    • 레파지토리에서 발생하는 push, pull request open, issue open등의 특정한 활동을 의미합니다.
    • GitHub Actions에서는 특정한 Event가 발생했을 시 그에 맞는 CI/CD 파이프라인을 구동하도록 설정할 수 있습니다.

  3. Jobs
    • 하나의 runner에서 실행될 여러 step의 모음을 의미합니다.
    • step은 실행가능한 하나의 shell script 또는 action을 의미합니다.
    • job안의 step들은 순차적으로 실행됩니다.
    • 하나의 workflow안에 여러 job들을 설정할 수 있습니다.
    • workflow의 job들은 기본적으로 병렬로 실행됩니다.
    • 일부 job의 경우에는 다른 job에 의존성을 설정해서 다른 job이 완료되고 난 뒤 실행하도록 할 수 있습니다.

  4. Actions
    • GitHub Workflow에서 자주 사용되는 기능들을 모아둔 일종의 커스텀 애플리케이션입니다.
    • 설정파일에서 use 키워드와 함께 사용할 수 있으며 브랜치로 체크아웃하고, 환경을 설정하는 등 복잡하지만 자주 사용되는 과정들을 미리 정의해두고 편리하게 활용할 수 있습니다.
    • GitHub Marketplace에서 Action들을 검색하고 활용할 수 있습니다.
  5. Runner
    • workflow를 실행할 서버를 의미합니다. 클라우드형 CI/CD 플랫폼인 GitHub Actions는 직접 컴퓨터를 관리할 필요 없이 가상의 Runner를 통해서 Workflow를 실행시켜줍니다.
    • 현재 GitHub Actions의 Runner는 기본적으로 Node 16 version을 탑재하고 있습니다.


CD 적용기

  1. root에 .github/workflows라는 폴더를 만든다.
  2. 위의 폴더에 cicd/yml 파일을 만든다. cicd 파일명은 상관없다.
  • 나의 파일
name: KakaoGroup Publish
on:
  push:
    branches: ['main']

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Node.js 16.x
        uses: actions/setup-node@v3
        with:
          node-version: 16.x

       - name: Setting environment variables
        run: |
          echo "VITE_CLIENT_KEY=$KAKAO_CLIENT_KEY" >> .env
        env:
          KAKAO_CLIENT_KEY: ${{secrets.KAKAO_CLIENT_KEY}}


      - name: InstallDependencies
        run: npm install 

      - name: Build Project
        run: npm run build

      - name: publish Project
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.KAKAO_WEB_PAGE_KEY }}
          publish_dir: ./dist
  1. main 브랜치에 push or Pull Request Merge가 발생하면 workflow를 실행한다.
  2. github secret 설정을 통해서 .env에 있는 변수에 접근해서 값을 가지고 온다.
  3. 필요한 dependencies들을 설치한다.
  4. build script를 실행합니다.
  5. github page에 publish한다.

개인 프로젝트에 처음으로 CD를 적용해보았는데 정말 편리했다. 또한 개인 프로젝트라고 하더라도 브랜치 전략을 어떻게 가지고 갈지에 대해 생각을 많이 하고 접목시켜본 프로젝트였다.

profile
https://danny-blog.vercel.app/ 문제 해결 과정을 정리하는 블로그입니다.

0개의 댓글