Github Actions 소개

Github Actions

Github Actions 이란?

Github Actions는 Github 저장소를 기반으로 워크플로우(Workflow)를 자동화 할 수 있는 도구입니다. 워크플로우를 이용하면, 저장소에서 발생하는 이벤트를 이용하여, 소스를 빌드, 테스트, 패키징, 배포 등을 자동화 처리할 수 있습니다.

워크플로우는 Runner 에 의해서 실행됩니다. Runner는 Github에서 호스팅하는 머신에서 컨테이너를 실행주는 역할을 합니다. 물론 사용자가 호스팅하는 머신에서도 실행시킬 수 있습니다.

현재 Github 마켓플레이스에는 다양한 워크플로우가 공유되어 있기 때문에, 필요한 워크플로우를 찾아서 쉽게 사용할 수 있습니다.

Github Actions에 대한 자세한 내용은 아래 페이지에서 확인할 수 있습니다.

가격

공개저장소의 경우 한달에 500MB 스토리지와, 2000분의 실행시간 동안 무료로 사용할 수 있습니다.

개인저장소의 경우 사용하는 제품 플랜에 따라 다릅니다. 자세한 사항은 About billing for GitHub Actions 에서 확인할 수 있습니다.

워크플로우는 저장소마다 최대 20까지 등록할 수 있습니다. 그리고 워크플로우의 Job은 최대 6시간 동안 실행될 수 있고, 그 시간을 초과하게 되면 자동으로 중지됩니다. 그리고 사용하는 Github 플랜에 따라 전체 저장소에서 동시에 실행할 수 있는 Job의 개수등이 정해져 있습니다.


Github Actions의 기본 개념

Github Actions를 이해하기 위해 알아야 할 기본 개념에 대해서 알아보겠습니다. 기본 개념은 Workflow, Event, Job, Step, Action, Runner 등이 있습니다.

Workflow

최상위 개념으로서, 여러 Job으로 구성되어 있습니다. 그리고 Event에 의해 트리거되어 자동으로 실행할 수 있습니다.

Workflow 는 YAML 파일로 작성되어 있으며, 저장소의 .github/workflows/ 디렉토리에 저장되어 있습니다.

Event

Workflow를 트리거(Trigger)할 때 사용되는 특정 활동 같은 것을 의미합니다.

주요 이벤트는 다음과 같습니다.

  • 저장소에서 발생하는 이벤트, 예를 들어 특정 브랜치로 Push 하거나, Pull Request 하는 것입니다.
  • 특정 브랜치로 push 하는 이벤트
  • 특정 브랜치로 Pull Request 하는 이벤트
  • Webhook 이벤트
  • 특정 시간에 실행하는 스케줄 이벤트

자세한 내용은 Events that trigger workflows 에서 확인할 수 있습니다.

Job

Job은 여러개의 Step 으로 구성되어 있습니다. 그리고 다른 Job 에 의존관계를 가질 수 있으며, 병렬 실행도 가능합니다. Job은 가상 환경의 인스턴스에서 실행됩니다.

Step

Task들의 집합으로, 명령어를 실행하거나, Action을 실행할 수 있습니다.

Action

워크플로우의 가장 작은 블럭으로서, 어떤한 행위를 하는 개별 태스크(Task)를 의미합니다. 재사용이 가능한 컴포넌트로서, 마켓플레이스에 있는 공용 Action을 사용할 수 도 있고, 개인이 직접 만든 Action도 사용할 수 있습니다.

Runner

워크플로우의 Job들을 실행시켜주는 역할을 합니다. 워크플로우가 실행되면 인스턴스를 생성하고, Gitbub Action Runner 애플리케이션을 설치한, Job들을 실행시킵니다.

Github에서 직접 호스팅해주는 Github-hosted Runner와 자신이 직접 호스팅하는 Self-hosted Runner 가 있습니다.

좀 더 자세한 내용은 Core concepts 에서 확인할 수 있습니다.


Github Action 생성해 보기

Github Actions 의 워크플로우를 사용하려면, 지정된 디렉토리에 직접 yaml 파일을 생성거나, Github 화면의 “Actions” 탭에서 생성할 수 있습니다.

  • 직접 yaml 파일을 생성할 경우 디렉토리
.github/workflows/main.yaml
  • Github 화면의 “Actions” 탭
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c7654b08-f50a-4be1-95b5-1a01a5a06b9c/Untitled.png

워크플로우 등록하기

Github 화면의 “Actions” 탭을 이용하기 기본 워크플로우를 생성해 보겠습니다.

“Simple workflow”의 “Set up this workflow”를 클릭합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cff85535-5416-4ae0-9463-ce82aed904be/Untitled.png

“Set up this workflow”를 클릭하면, 워프플로우를 편집할 수 있는 화면이 나타납니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e6e5474b-e4bd-4231-8859-f4587d70f4db/Untitled.png

기존적으로 생성된 워크플로우의 내용은 다음과 같습니다. 이 워크플로우는 단순히 “Hwllo, world!” 같은 문자열을 echo를 이용하여 출력해주는 역할을 합니다.

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

name: CI

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

# 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@v2

    # 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.

화면 오른쪽 상단의 “Start commit”을 클릭해서, 워프플로우를 등록합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cb79b7e2-38e6-42c0-8afa-2c09164c8922/Untitled.png

워크플로우 실행하기

등록한 워크플로우를 실행해보겠습니다. 현재는 별도로 실행을 할 수 있는 버튼이 없습니다. 그래서 워크플로우 지정한 이벤트를 발생시켜서 실행을 해야합니다.

다음 워크플로우 코드를 보면, master 브랜치에, pushpull_request 이벤트가 발생할때, 워크플로우가 실행된다는것을 확인할 수 있습니다.

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

push 이벤트를 발생시키위하여, 저장소에 [README.md](<http://readme.md>) 파일을 추가해 보겠습니다. “Code” 탭으로 이동하여, “Add a README”를 클릭합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f5b1e40e-7ece-4f3f-8e3e-531ea3ac65a3/Untitled.png

[README.md](<http://readme.md>) 를 편집할 수 있는 화면이 나타납니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/afa6d115-329e-4428-934f-a4162387fdba/Untitled.png

기본값을 사용하거나, 적당한 값을 입력 한 후, 편집 화면의 아래에 있는 “Commit new file” 버튼을 클릭합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8dd5eb1c-bbc4-49b3-a8f1-89b00ea51d86/Untitled.png

이제 [README.md](<http://readme.md>) 파일이 저장소로 push 됩니다. 그러면 push 이벤트에 의해서, 앞서 작성한 워크플라우가 자동으로 실행됩니다. 워크플로우의 실행을 확인 하라면, “Actions”탭을 클릭하면 됩니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/efc03d06-fc80-44fd-884c-5549e56c4a9e/Untitled.png

push 이벤트의 의해서 실행중인 워크플로우를 확인할 수 있습니다. commit 이름을 클릭하면, 워크플로우의 실행 현황을 알 수 있습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/492c3dad-e0a8-4dd5-88f0-6d221a58f91d/Untitled.png

왼쪽 메뉴의 build 를 클릭하면, 워크플로우의 실행 단계를 확인할 수 있습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6ee2551a-0882-4964-b5b5-36d79ee9ac35/Untitled.png

참고