bytrustu tech blog

Github Actions CI/CD 본문

Git

Github Actions CI/CD

bytrustu 2022. 12. 29. 01:47

개발 > 빌드 > 테스트 > 릴리즈 > 배포

 

어느 정도 규모가 있는 개발팀의 경우에는 CI/CD를 구축하는 것이 보편적이다.

Github Actions은 빌드, 테스트, 배포를 자동화시키는 파이프라인을 만들 수 있다.

Github Actions를 통해서 개발에서 배포(AWS S3) 까지의 작업을 자동화하여 구축해 보자.

 

Github Actions

Github Actions란, 개발 라이프사이클 안에서 Pull Request, Push 등의 이벤트 발생에 따라 자동화된 작업을 진행할 수 있게 해주는 기능이다.

 

CI (Continous Integration)

CI는 코드를 지속적으로 통합해나가는 것을 의미한다.

일반적으로 코드의 통합은 Github의 PR을 통해서 진행할 수 있기에 CI 과정에서 도대체 무엇을 하는 거지 의아할 수 있다.

여기서 말하는 코드의 통합은 단순히 코드와 코드를 합치는 것뿐만이 아니라 코드를 테스트하고 유효한지 검사하는 확인을 포함한다.

코드를 통합할 때 가장 중요하고 걱정되는 부분은 "머지 후에 제대로 돌아갈까?"이다.

이런 걱정과 의문을 매번 개발자가 확인하는 것이 아니라 CI 과정에서 테스트를 실행하고 코드가 유효한지 검사하고 만약 문제가 발생했을 경우 즉각적으로 피드백을 통해서 개발자가 문제를 확인하고 수정할 수 있게 만들어준다.

CD (Continuous Deployment)

CI 과정을 통해서 성공적으로 통합된 코드를 실제 사용자가 사용하고 있는 Production 환경에 배포하는 것을 의미한다.

구성요소

  • Workflow
    1. Github Actions상에서 실행될 자동화된 일련의 작업 흐름을 의미한다. YAML 파일을 통해서 Workflow를 설정한다.
    2. Repository 안에서 발생하는 이벤트나 예약된 스케줄에 의해서 실행될 수 있으며, 직접 수동으로 실행하는 것도 허용된다.
  • Event
    1. Repository에서 발생하는 push, pull request open, issue open 등의 Event를 의미한다.
    2. Github Actions에서는 특정한 Event가 발생했을 시 그에 맞는 CI/CD 파이프라인을 구동하도록 설정할 수 있다.
  • Jobs
    1. 하나의 runner에서 실행될 여러 step의 모음이다.
    2. step은 실행가능한 하나의 shell script 또는 action을 의미한다.
    3. job안의 step들은 순차적으로 실행된다.
    4. 하나의 Workflow안에 여러 job들을 설정할 수 있다.
    5. 일부 job의 경우에는 다른 job에 의존성을 설정해서 다른 job이 완료되고 난 뒤 실행하도록 할 수 있다.
  • Actions
    1. Github Workflow에서 자주 사용되는 기능들을 모아둔 일종의 커스텀 애플리케이션이다.
    2. 설정파일에서 use 키워드와 함께 사용할 수 있으며 브랜치로 체크아웃하고, 환경을 설정하는 등 복잡하지만 자주 사용되는 과정들을 미리 정의해두고 편리하게 활용할 수 있다.
    3. Github Marketplace에서 Action들을 검색하고 활용할 수 있다.
  • Runner
    1. Workflow를 실행할 서버를 의미한다.

CI Workflow 적용하기

. github/workflow 폴더에 yaml 파일을 작성한다.

main 브랜치에 push event가 발생했을 경우에 ci, test 로직이 작동한다.

name: cicd

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  helloWorld:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main
      - run: npm ci
      - run: npm run test
      - run: echo SUCCESS

repository 내용을 추가하여 push 후 Actions 탭을 확인한다.

CD Workflow 적용하기

CLI로 AWS S3에 배포하기 위해서는 액세스 키 발급이 필요하다.

AWS → 보안자격증명에서 액세스 키를 발급한다.

액세스 키를 발급하게 되면 Access Key와 Secret Access Key를 발급받게 된다.

CD를 적용할 Repository의 Settings → Secrets → Actions 페이지로 이동하여 키를 등록한다.

적용 후. yaml 파일을 S3에 배포되도록 수정한다.

name: cicd

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  helloWorld:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@main
      - run: npm ci
      - run: npm run test
      - run: npm run build
      - name: deploy to s3
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --delete
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: 'ap-northeast-2'
          SOURCE_DIR: 'build'

ci, test, build를 통과하게 되면 S3에 파일을 업로드하여 배포가 완료된다.

 

Github Actions를 통해서 CI/CD 적용하여 AWS S3에 배포하는 과정을 알아보았다.

CI/CD에 대한 기초 개념을 학습할 수 있었고, 필요성도 더더욱이 느낄 수 있었다.

코드 변경이 있을 때마다 일일이 접근해서 명령어를 입력하여 빌드하고 테스트하고 배포하는 과정이 많이 번거로웠는데, 이 과정을 자동화하여 오류를 최소화하고 문제 상황을 빠르게 파악해서 해결할 수 있을 것 같다.

'Git' 카테고리의 다른 글

코딩 컨벤션 그리고 자동화  (0) 2022.12.28
Comments