GitHub Actions 설정

코몽·2023년 6월 3일
0

Cheat Sheet

목록 보기
4/5

GitHub Actions

GitHub Actions는 GitHub에서 제공하는 클라우드형 CI/CD 툴입니다. GitHub에서 자체적으로 제공하기에 GitHub 레파지토리와의 연동이 쉽고, 레파지토리 안에서 CI/CD까지 함께 구축하고 관리할 수 있다는 이점으로 인해 현재 많은 인기를 얻고 있습니다.

1. GitHub Actions의 구성요소들

  1. Workflow

    • GitHun Actions상에서 실행될 자동화된 일련의 작업 흐름을 의미합니다. YAML 형식의 파일을 통해서 Workflow를 설정할 수 있습니다
  2. Workflow

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

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

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

    • GitHub Workflow에서 자주 사용되는 기능들을 모아둔 일종의 커스텀 애플리케이션입니다.
    • 설정파일에서 use 키워드와 함께 사용할 수 있으며 브랜치로 체크아웃하고, 환경을 설정하는 등 복잡하지만 자주 사용되는 과정들을 미리 정의해두고 편리하게 활용할 수 있습니다.
    • GitHub Marketplace에서 Action들을 검색하고 활용할 수 있습니다.
  6. Runner

    • workflow를 실행할 서버를 의미합니다. 클라우드형 CI/CD 플랫폼인 GitHub Actions는 직접 컴퓨터를 관리할 필요 없이 가상의 Runner를 통해서 Workflow를 실행시켜줍니다.
    • 현재 GitHub Actions의 Runner는 기본적으로 Node 16 version을 탑재하고 있습니다.

2. CI/CD로 구축할 목표

정적 웹사이트들은 S3를 통해서 호스팅 할 수 있습니다. 하지만 매번 CRA의 dependencies를 설치하고, build script를 실행하고, AWS에 로그인해서 S3 버킷에 들어간뒤에, 기존의 자료들을 삭제하고 새로운 파일들을 업로드하는 것은 꽤나 번거로운 일입니다. 이제 GitHub Actions를 통해서 아래의 과정을 자동화 시켜보겠습니다.

  1. 마스터 브랜치에 push or Pull Request Merge가 발생하면 workflow를 실행한다.
  2. 필요한 dependencies들을 설치한다.
  3. build script를 실행합니다.
  4. aws에 접속한 후 s3 bucket에 build한 결과물을 업로드합니다.
  • 예시파일
name: CI/CD

on:
  push:
    branches:
    - master
  workflow_dispatch:

jobs:
  cicd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - 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'
profile
프론트엔드 웹 개발자(React) https://code-d-monkey.tistory.com/

0개의 댓글