Git,  Programming

[Git] Github Action 사용법

Github에선 workflow를 자동화 할 수 있는 기능을 제공한다. 대표적인 workflow 자동화 프로그램으로는 Jenkins가 있는데 간단한 업무를 Github에서 제공하는 Action으로 어느정도 대체가 가능하다.

대신 위 기능은 각 repository 별 최대 등록 가능한 workflow 개수가 제한되며 각종 resource (runtime, memory size) 등이 제한된다.

활용처

Sanity check

Source code의 build 및 test 수행을 쉽게 자동으로 수행시킬 수 있다.

Release

해당 서비스를 배포를 해야되는 경우 따로 시간을 내어 release를 하지 않고 자동으로 특정 주기를 설정해 배포 할 수 있다.

Data scraping

만약 주기적으로 어떤 주제에 대한 data를 수집하고 싶을 때 위 기능을 통해 수행 가능하다.

Github Action Core

Workflow

여러 job으로 구성되며 event에 의해 triggered 될 수 있는 자동화된 process를 말한다. 최상위 개념이며 workflow는 기본적으로 YAML file로 작성되며 repository의 .github/workflows 에 저장된다.

Event

Workflow를 trigger하는 특정 활동이나 규칙을 의미한다. 예를 들면

  • 특정 branch로 push
  • 특정 branch pull request
  • 특정 시간대 반복
  • Webhook을 사용해 외부 이벤트 통해 실행

자세한 설명: Events that trigger workflows

Job

Job은 여러 step으로 구성되고 가상 환경의 instance에서 실행된다. 각 job은 독립적으로 병렬로 실행 가능하다.

Step

Task들의 집합으로 command를 날리거나 action을 실행 할 수 있다.

Action

Workflow의 가장 작은 block으로, Job을 만들기 위해 Step들을 연결 할 수 있다. Action은 재사용이 가능한 component다.
Github에서 제공하는 Action을 사용 할 수도 있고, custom action을 사용 할 수도 있다.

Runner

Github Action Runner 어플리케이션이 설치된 머신으로, workflow가 실행될 instance다. 크게 Github에서 호스팅 해주는 1) Github-hosted runner와 2) 직접 호스팅하는 self-hosted runner로 나뉜다.

Example

Github action 기능을 이용해 python file을 실행시키는 예제다.

Python 파일 작성

# hello.py
print("Hello World")

우선 Repository를 생성한 뒤에 위와 같이 파일을 만들어준다.

Workflow 생성

Actions -> Simple workflow -> Configure

위 메뉴 선택을 통해 initial workflow 파일 작성을 할 수 있다.

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the "main" branch
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v3

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.
          python3 hello.py

여기서 마지막 run:에서 python3 hello.py 를 작성해주고 해당 파일을 commit 해주면 된다. 나같은 경우 python.yml로 저장했다.

Run action

Actions 탭을 선택하게 되면 이제 우리가 작성한 workflow 이름 (위 workflow의 경우 CI로 지정됐다.) 으로 된 workflow가 보이며 해당 workflow의 yml 파일을 선택하게 되면 수행 출력 결과를 볼 수 있다.

Actions -> python.yml -> build

결과를 보면 우리가 작성한 step 중 Run a multi-line script에서 Hello World가 출력된 것을 볼 수 있다.

Reference

  1. https://zzsza.github.io/development/2020/06/06/github-action/
  2. https://www.actionsbyexample.com

Leave a Reply

Your email address will not be published. Required fields are marked *