Github Actions
Github Actions 이란?
Github Actions는 Github 저장소를 기반으로 워크플로우(Workflow)를 자동화 할 수 있는 도구입니다. 워크플로우를 이용하면, 저장소에서 발생하는 이벤트를 이용하여, 소스를 빌드, 테스트, 패키징, 배포 등을 자동화 처리할 수 있습니다.
워크플로우는 Runner 에 의해서 실행됩니다. Runner는 Github에서 호스팅하는 머신에서 컨테이너를 실행주는 역할을 합니다. 물론 사용자가 호스팅하는 머신에서도 실행시킬 수 있습니다.
현재 Github 마켓플레이스에는 다양한 워크플로우가 공유되어 있기 때문에, 필요한 워크플로우를 찾아서 쉽게 사용할 수 있습니다.
Github Actions에 대한 자세한 내용은 아래 페이지에서 확인할 수 있습니다.
- 공식 홈페이지 : https://github.com/features/actions
- 공식 문서 : https://help.github.com/en/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
도 사용할 수 있습니다.
- Marketplace Actions : https://github.com/marketplace?type=actions
- GitHub Actions : https://github.com/actions/
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” 탭

워크플로우 등록하기
Github 화면의 “Actions” 탭을 이용하기 기본 워크플로우를 생성해 보겠습니다.
“Simple workflow”의 “Set up this workflow”를 클릭합니다.

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

기존적으로 생성된 워크플로우의 내용은 다음과 같습니다. 이 워크플로우는 단순히 “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”을 클릭해서, 워프플로우를 등록합니다.

워크플로우 실행하기
등록한 워크플로우를 실행해보겠습니다. 현재는 별도로 실행을 할 수 있는 버튼이 없습니다. 그래서 워크플로우 지정한 이벤트를 발생시켜서 실행을 해야합니다.
다음 워크플로우 코드를 보면, master
브랜치에, push
나 pull_request
이벤트가 발생할때, 워크플로우가 실행된다는것을 확인할 수 있습니다.
on: push: branches: [ master ] pull_request: branches: [ master ]
push
이벤트를 발생시키위하여, 저장소에 [README.md](<http://readme.md>)
파일을 추가해 보겠습니다. “Code” 탭으로 이동하여, “Add a README”를 클릭합니다.

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

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

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

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

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