글 작성자: 택시 운전사
반응형

Github Actions란?

  • Github에서 제공하는 저장소에서 소프트웨어 개발 Workflow를 자동화, 커스터마이징, 실행할 수 있는 서비스
  • Jenkins를 이용했던 CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유 가능
  • Action들을 결합해서 맞춤형 Workflow 생성 가능
  • 기존에 Jenkins, Lambda를 이용했던 자동화 작업들을 OSS로 통합 가능
  • 간단히하자면 Workflow 툴
    • Build, Test, Deploy, Release Drafter, Labeler ...
  • 자세한 설명은 역시 Github Actions 공식문서 참고

개념

Github Action은 다음과 같은 개념들로 이루어져있습니다.

Workflow

  • 최상위 개념, yaml로 작성하는 파일의 단위
  • .github/workflows 하위에 위치하면 저장소에서 자동으로 인식
  • 단일 혹은 여러개의 Job으로 구성되어, 특정 Event에 트리거 될 수 있는 프로세스

Event

  • Workflow를 실행하는 규칙

Job

  • 가상 환경에서 실해되는 주체, 다른 Job과의 의존성을 가질 수 있고 병렬로도 실행가능
  • JenkinsJob과 비슷한 개념

Step

  • Task의 집합으로 Command 혹은 Action을 실행

Action

  • Workflow의 가장 작은 단위
  • 다른 사람들의 Action이 public으로 공개되어있다면, 이를 아무런 조건없이 사용할 수 있음
  • JobStep을 연결할 수 있음

Runner

  • Github Action Runner App이 설치된 머신으로 Workflow가 실제로 실행될 인스턴스
  • Jenkins가 설치된 Server와 비슷한 개념
  • github-hosted runner와 Self-hosted runner로 구분
    • github-hosted runner: 저장소에서 설치된 서버에 자동으로 설치되어 있는 runner
    • self-hosted runner: 사용자가 직접 설치한 서버에 자동으로 설치되어 있는 runner

workflow 작성하기

가장 간단한 형태인 Build Test를 위한 Workflow를 작성해보겠습니다.

name: Build

on:
  # PR의 base 브렌치가 master, RB-**인 경우 해당 workflow를 실행합니다.
  pull_request:
    branches: [ master, RB-** ]

jobs:
  build:
    # 사용할 러너를 설정합니다.
    runs-on: [ self-hosted ]

    # 변수를 정의합니다.
    strategy:
      matrix:
        node-version: [ 14.17 ]

    steps:
      # 소스를 가져옵니다.
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 100

      # node-version에 해당하는 Node 세팅합니다.
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}

      # 프로젝트를 build합니다.
      - name: Build
        run: |
          npm install -g yarn
          yarn install --prefer-offline --frozen-lockfile
          yarn build

해당 코드를 .github/workflows/build.yml 파일로 저장하고, base 브렌치가 master혹은 RB-**인 PR이 올라오면 Workflow가 자동으로 실행됩니다. 위 코드에서 사용된 actions/checkout@v2, actions/setup-node@v1는 Github에서 제공하는 action들로 위와 같이 바로 사용할 수 있습니다.

사용할만한 커스텀 Action

  • Release Drafter - 수정한 파일의 확장자, 브렌치명, PR 제목등에 따라 자동으로 라벨을 추가해주고 정해진 형식에따라 자동으로 릴리즈 초안을 작성해주는 Action
  • Auto Author Assign - PR을 올린 유저를 자동으로 해당 PR의 어사인에 추가해주는 Action
  • Merge pull requests - 조건을 만족하면 PR을 자동으로 merge하는 Action

참고자료

반응형