Github Action

진기·2024년 3월 15일


Github Action은 Github에서 공식적으로 제공하는 CI/CD 툴, 다시 말해 개발의 work flow를 자동화 할 수 있게 도와주고 빌드, 테스트 및 배포 파이프라인을 자동화 할 수 있는 지속적 통합 및 지속적 배포(CI/CD) 플랫폼이다. 리포지토리에 대한 모든 pull 요청을 빌드 및 테스트하는 work flow를 생성하거나 Merge된 pull 요청을 프로덕션에 배포할 수 있다.


Github Action 구성요소

Workflows

  • workflow는 Github Action의 기본 구성 단위이다.
  • 일반적으로 YAML 파일로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장된다.
  • Github에게 YAML 파일로 정의한 자동화 동작을 전달하면, Github Action은 해당 파일을 기반으로 그대로 실행시킨다.
  • workflow는 하나 이상의 작업을 포함할 수 있으며 리포지토리에서 push 또는 pull 요청과 같은 이벤트에 의해 트리거된다.

Event

  • workflow를 트리거(실행)하는 특정한 활동이나 규칙을 말한다.
  • 예를 들어, 누군가 커밋을 리포지토리에 push하거나 pull 요청이 생성될 때 Github에서 활동이 시작될 수 있다.
  • 일반적인 이벤트에는 push, pull_request 및 일정이 포함된다.

Job

  • Job은 여러 Step으로 구성되고, 단일 가상 환경에서 실행된다.
  • 다른 Job에 의존 관계를 가질 수도 있고, 독립적으로 병렬로 실행될 수도 있다.
  • Runner라는 가상 머신에서 실행되며 하나 이상의 단계를 포함할 수 있다.

Step

  • 작업 내 작업의 가장 작은 단위이다.
  • Job 안에서 순차적으로 실행되는 프로세스 단위이다.
  • Step에서 명령을 내리거나, action을 실행할 수 있다.
  • 각 단계는 동일한 실행기 인스턴스 내에서 실행된다.

Action

  • Job을 구성하기 위한 Step들의 조합으로 구성된 독립적인 명령이다.
  • workflow의 가장 작은 빌드 단위이다.
  • workflow에서 action을 사용하기 위해서는 action이 step을 포함해야 한다.
  • action을 구성하기 위해서 레포지토리와 상호작용하는 커스텀 코드를 만들 수도 있다.
  • 사용자가 직접 커스터마이징하거나, 마켓 플레이스에 있는 action을 가져다 사용할 수도 있다.

Runner

  • Github Action Runner 어플리케이션이 설치된 가상 머신 또는 자체 호스팅 환경으로, workflow가 실행될 인스턴스이다.

Github Action 생성해보기

Github Action은 event, job, step을 정의하기 위해 YAML 파일을 사용한다. workflow를 구성할 레포지토리에 .github/workflows 디렉토리 안에 test-github-actions.yml 형태로 파일을 생성한다.

name: learn-github-actions
on:
   push:
     branches: [ master, dev ]
   pull_request:
     branches: [ master ]
     paths:
       - "**.js"
     paths-ignore:
       - "doc/**"
jobs:
 build:
   strategy:
     matrix:
       node-version: [10.x, 12.x]

   runs-on: ubuntu-latest
   steps:
     - name: Checkout source code
       uses: actions/checkout@v2
       
     - name: My First Step
       run:
         npm install
         npm test
         npm build

     - name: Cache yarn dependencies
       uses: actions/cache@v1
       id: yarn-cache
       with:
         path: node_modules
         key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
         restore-keys: |
           ${{ runner.os }}-yarn-

work flow

name: learn-github-actions 
  • Github 레포지토리의 액션 탭에 노출되는 work flow의 이름.
  • 옵셔널한 값이다.

Event

on:
    push:
      branches: [ master, dev ]
    pull_request:
      branches: [ master ]
      paths:
        - "**.js"
      paths-ignore:
        - "doc/**"
  • workflow 파일을 자동으로 트리거하는 이벤트를 명시한다.
  • push 이벤트를 명시하면 누군가가 깃 레포지토리에 변경 사항을 push 하는 시점마다 Job이 실행된다.
  • 특정한 브랜치나 tag, path에서만 실행되도록 설정할 수도 있다.
  • 위 코드처럼 path로 특정 패턴을 설정하여 해당 패턴에 일치하는 파일이 변경되었을 때 workflow가 실행되도록 설정할 수도 있고, paths나 paths-ignor를 사용하여 무시할 패턴을 설정할 수도 있다.

Job

jobs:
  build:
    strategy:
      matrix:
        node-version: [10.x, 12.x]

    runs-on: ubuntu-latest
    steps:
      - name: Checkout source code 
        uses: actions/checkout@v2
        
      - name: My First Step
        run:
          npm install
          npm test
          npm build

      - name: Cache yarn dependencies 
        uses: actions/cache@v1
        id: yarn-cache
        with:
          path: node_modules
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
  • runs-on : 해당 job을 어떤 OS에서 실행할 것인지 명시한다.
  • steps : job이 가질 수 있는 동작의 나열. 각각의 step은 독립적인 프로세스를 가진다.
    • uses : 해당 step에서 사용할 액션으로 Github 마켓플레이스에 올라온 action들을 사용할 수도 있다. {owner}/{repo}@{ref|version} 의 형태를 지닌다.
    • name : step의 이름
    • run : job에 할당된 컴퓨팅 자원의 shell을 이용하여 커맨드 라인을 실행한다.
  • env : 해당 job에서 사용할 환경 변수를 key/value 형태로 설정한다.
  • strategy : 여러 환경에서의 테스트/배포를 위해서 빌드 matrix를 구성한다.
  • with : 해당 action에 의해 정의되는 input 파라미터로 key/value 페어로 되어 있다. input 파라미터는 환경 변수로 설정되고, 'INPUT_'이라는 prefix가 붙는다.
profile
개발 성장 이야기

0개의 댓글