Git Actcions 소개 및 간단한 사용 방법

소프트웨어 개발의 효율화를 위한 CI/CD가 주목받고 있는 가운데, GitHub Actions는 GitHub에서 CI/CD를 구현할 수 있는 도구로, 무료로 사용할 수 있을 뿐만 아니라 다른 CI/CD 도구에 뒤지지 않는 기능을 제공한다. 이 글에서는 GitHub Actions가 무엇인지에 대한 개요를 시작으로, 활용 시 장점과 주의점, 사용 사례에 대해 정리하였다.

GitHub Actions

GitHub Actions란? “워크플로우 자동화를 실현하는 기능”

GitHub Actions는 미리 정의한 처리와 조건의 조합(=워크플로우/Workflow)을 자동화하는 GitHub 공식 기능이다.
GitHub Actions에서는 리포지토리에 대한 푸시 등의 처리를 트리거로 하여 전용 Workflow에 정의해 둔 처리를 자동으로 실행한다.
GitHub Actions를 사용하면 개발에서 주목받고 있는 ‘CI/CD(*)‘를 구현할 수 있다.

GitHub Actions를 구성하는 주요 구성 요소 및 기능

GitHub Actions는 여러 가지 구성 요소와 기능으로 구성되어 있다. 그 중 주요 종류를 살펴보면 다음과 같다.

Action | 미리 정의된 작업을 실행하는 커스텀 애플리케이션

Action은 미리 정의된 작업을 실행하는 GitHub Actions 전용 커스텀 애플리케이션이다. 기존 Action은 GitHub Marketplace에서 찾을 수 있으며, 직접 Action을 만들 수도 있다.

주요 Action

다음은 실제로 어떤 Action이 있는지 주요 예시를 살펴보자.

Action 예시

Action 설명
checkout 저장소에서 파일 체크아웃한다.
upload-artifact 임의의 파일을 ‘결과물(artifact)‘로 저장한다.
download-artifact ‘결과물(artifact)로 저장되어 있는 파일을 다운로드한다.
cache 종속 관계나 빌드를 캐싱하여 처리 속도를 높인다.
github-script GitHub API를 통해 GitHub의 각종 기능에 접근한다.
create-release GitHub Release API를 통해 릴리스를 생성한다.
stale 일정 기간 동안 사용되지 않은 이슈나 풀 리퀘스트가 있을 경우 경고하거나 이를 닫는다.
labeler 풀리퀘스트에 라벨을 부여한다.
delete-package-versions GitHub Packages에서 패키지 버전을 삭제한다.
setup-node Node.js 환경 구축하기
setup-python Python 환경 구축하기
setup-go Go 환경 구축하기
setup-dotnet .NET CLI 환경을 구축한다.
setup-java Java 환경 구축한다.
toolkit 액션을 쉽게 생성하는 데 도움이 되는 툴킷을 사용할 수 있도록 한다.
javascript-action 자바스크립트 액션 생성한다.
typescript-action TypeScript 액션 생성한다.

Workflow | 실행할 처리와 그 처리를 실행하기 위한 조건을 정리한 프로세스이다.

Workflow는 실행할 처리와 그 처리를 실행하는 조건을 정리한 프로세스이다. 여러 Action을 조합하여 Workflow를 만드는 방법도 있다.

Runner | 워크플로우(Workflow)를 실행하는 서버

GitHub에서는 Workflow를 실행하는 서버(환경)를 Runner라고 부르며, GitHub Actions를 이용할 때는 GitHub 공식에서 제공하는 가상 머신을 Runner로 사용할 수 있다. 직접 Runner를 준비하여 사용할 수도 있다.

Job | 동일한 Runner에서 실행되는 워크플로우(workflow) 단계

Job은 동일한 Runner에서 실행되는 워크플로우 내의 단계를 의미하며, Job은 다른 Job과 의존관계를 설정할 수도 있다. 기본적으로 Job은 Job 간 종속관계 없이 병렬로 실행된다.

GitHub Actions 사용의 장점

GitHub Actions 외에도 CI/CD와 같은 자동화를 실현하게 해주는 도구가 있다. 그 중에서도 GitHub Actions의 가장 큰 장점은 GitHub에서 제공하는 가상 서버를 이용할 수 있다는 점이다.

GitHub Actions를 사용하면, 사용자가 직접 서버를 준비할 필요가 없다. 또한, 가상 서버가 아닌 물리적 서버를 사용해야 하는 경우, 사용자가 직접 서버를 준비하여 GitHub Actions를 사용할 수도 있다.

또한, GitHub와 관련된 처리의 자동화는 공식적인 기능인 만큼 GitHub Actions를 통해 원활하게 구현할 수 있다. 이는 다른 도구에는 없는 GitHub Actions만의 장점이라고 할 수 있다.

GitHub Actions 이용 시 주의사항

GitHub Actions는 이용 플랜에 따라 다음과 같은 기능적 제한이 있다.

플랜 최대 동시 Job 수 최대 동시 Job 수 (macOS) 사용 가능한 시간 제한 사용 가능한 저장 용량
Free 20 5 2,000분/월 500MB
Pro 40 5 3,000분/월 1GB
Team 60 5 10,000분/월 2GB
Enterprise 180 50 50,000 분/월 50GB

또한 GitHub Actions는 이용 정책의 범위 내에서만 사용할 수 있다. GitHub의 각 플랜과 이용약관에 대한 자세한 내용은 아래 공식 사이트에서 확인할 수 있다.

GitHub Actions 활용 예시

GitHub Actions는 다양한 용도로 활용이 가능하다. 아래에서 참고할 수 있는 몇 가지 활용 사례를 살펴보겠다.

  • 릴리즈 노트, 릴리즈 Source 등을 자동으로 생성하여 소프트웨어 릴리즈 작업의 효율화
  • Java, Python 등의 환경을 자동으로 구축
  • Pull Request한 내용 등을 Slack이나 이메일 등으로 자동 알림
  • 푸시할 때마다 자바스크립트 Lint를 실행

여기 소개한 것 외에도 GitHub Actions의 다양한 활용 사례를 생각해 볼 수 있다.

GitHub Actions의 기본적인 사용 예시

여기서는 GitHub Actions를 실제로 설정하면서 기본적인 사용법을 살펴보겠다.

Git 설치, GitHub 계정 생성 등 GitHub 관련 초기 설정은 완료된 것으로 가정한다.

먼저 GitHub 관리 화면에서 GitHub Actions를 설정할 전용 저장소를 생성한다. GitHub 관리 화면에서 ‘New’를 클릭힌다.

GitHub Actions용 저장소

저장소 생성 화면이 표시된다. 저장소 이름(‘Repository name’)에 원하는 이름을 입력하고, ‘Create repository’를 클릭한다.

저장소 이름 입력

Git bash 등에서 다음 명령어를 실행하여 생성한 리포지토리를 로컬에 복제(다운로드)한다.

HTTP:
git clone https://github.com/[사용자 이름]/[저장소 이름].git

SSH:
git clone git@github.com:[사용자 이름]/[저장소 이름].git

사용자 이름이 devkuma 이고, 저장소 이름이 ’test’라면, 아래와 같은 명령어가 된다.

HTTP:
git clone https://github.com/user/git-actions.git

SSH:
git clone git@github.com:devkuma/git-actions.git
% git clone git@github.com:devkuma/git-actions.git
Cloning into 'git-actions'...
warning: You appear to have cloned an empty repository.

클론한 로컬 저장소 내에 .github/workflows라는 폴더를 생성하고, 해당 폴더 내에 actions-test.yml이라는 파일을 하나 더 생성한다. 이 actions-test.yml이 GitHub Actions의 워크플로우가 된다.

% cd git-actions
% mkdir -p .github/workflows
% cd .github/workflows
% touch actions-test.yml

GitHub Actions의 워크플로는 .github/workflows라는 디렉터리에 저장한다. workflow는 YAML 형식(.yml)으로 작성한다.

다음으로 actions-test.yml을 임의의 텍스트 편집기로 아래와 같이 편집한다.

name: actions-test
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello World"

위 파일의 의미는 다음과 같다.

코드 설명
name: actions-test ‘actions-test’라는 이름의 워크플로우를 생성한다.
on: [push] 푸시가 실행될 때
runs-on: ubuntu-latest 최신 버전의 우분투 환경을 준비한다.
run: echo "Hello World" echo "Hello World" 명령을 실행한다.

이것으로 GitHub Actions의 워크플로우 파일이 생성되었다. 파일 생성 후 다음 순서로 파일 추가, 커밋, 푸시 작업을 수행한다.

git add .
git commit -m "[Add] actions test"
git push

위 푸시가 실행되면 workflow가 실행된다.

실제로 워크플로우가 실행되는지 확인해보자. GitHub 관리 화면에서 방금 생성한 저장소로 이동한 후 ‘Actions’ 메뉴를 열어보자.

Actions 메뉴 위치

GitHub Actions의 관리 화면이 표시된다. 아래와 같이 git commit에서 지정한 코멘트 이름으로 GitHub Actions의 로그가 기록되어 있으므로 이 로그를 클릭하여 확인한다.

GitHub Actions 로그

다음으로 다음 순서대로 클릭한다.

Step 안내

Step 실행

아래와 같은 화면이 표시되며, workflow에서 지정한 대로 “Run echo “Hello world!“라는 명령이 실행된 것을 확인할 수 있다.

명령어 실행 확인 위치

이번에 소개한 예시를 보면 알 수 있듯이 GitHub Actions의 workflow에서는 우분투 환경을 준비하고 우분투 내에서 다양한 명령어를 실행할 수도 있다.

마무리

GitHub Actions를 사용하면 Push 등의 작업을 트리거로 지정한 작업을 자동으로 실행할 수 있으며, GitHub Actions를 통해 CI/CD도 구현할 수 있다.

GitHub Actions에서는 GitHub가 제공하는 가상 서버를 이용할 수 있기 때문에 사용자가 직접 실행 환경을 별도로 준비 및 운영할 필요가 없다. 또한, GitHub 공식 기능이기 때문에 GitHub와의 연동이 용이하다는 점도 다른 CI/CD 도구에는 없는 장점이라고 할 수 있다.

GitHub Actions는 릴리즈 노트 자동 생성, 자바스크립트 Lint를 푸시할 때마다 자동 실행하는 등 다양한 용도로 유용하게 사용할 수 있다. 한편, Free 플랜의 경우 동시 실행할 수 있는 최대 작업 수가 20개까지로 제한되어 있다는 점, GitHub Actions를 사용할 때는 공식 사이트에 정리된 이용약관을 준수해야 한다는 점도 주의해야 한다.




최종 수정 : 2024-03-09