GitHub Actions

IT 위키

GitHub Actions는 GitHub 저장소 내에서 워크플로우(workflows)를 자동화할 수 있게 해 주는 CI/CD 및 이벤트 기반 자동화 플랫폼이다.

개념 및 구성 요소[편집 | 원본 편집]

GitHub Actions는 저장소에 `.github/workflows/` 디렉터리에 YAML 형식의 워크플로우 정의 파일을 두고, 특정 이벤트(push, pull_request 등)가 발생할 때 자동으로 일련의 작업(job)을 실행시키는 구조다.

주요 구성 요소는 다음과 같다:

  • 이벤트(Events): 워크플로우를 트리거하는 GitHub 내의 동작 (예: 코드 푸시, 풀 리퀘스트 생성 등)
  • 워크플로우(Workflow): 이벤트 발생 시 실행할 작업의 정의
  • 잡(Job): 워크플로우 내에서 병렬 또는 순차 실행되는 단위 작업
  • 스텝(Step): 잡 안에서 실행되는 개별 명령 또는 액션
  • 액션(Action): 재사용 가능한 코드 단위 또는 컨테이너로, 스텝에서 호출됨
  • 러너(Runner): 워크플로우를 실제 실행하는 실행 환경. GitHub 호스팅 러너 또는 자체 호스팅 러너를 사용할 수 있음
  • 시크릿(Secrets): 민감한 정보를 저장하고 워크플로우 내에서 안전하게 참조
  • 매트릭스(Matrix): 여러 환경 조합에서 작업을 병렬 실행하는 기능

특징 및 장점[편집 | 원본 편집]

  • GitHub 내에서 자동화를 구현할 수 있어 별도의 외부 CI 도구 없이도 설정 가능
  • 다양한 운영체제 및 런타임 환경에서 실행 가능
  • 매트릭스 전략, 조건문, 잡 간 의존성 등 고급 제어 기능 제공
  • 실행 결과 시각화 및 로그 확인이 쉬움
  • 사용자 정의 액션과 마켓플레이스를 통해 기능 확장 가능

활용 예시[편집 | 원본 편집]

코드가 main 브랜치에 푸시될 때 자동으로 빌드, 테스트, 배포를 수행하는 워크플로우를 구성할 수 있다. 또한 문서 파일이 변경될 때 GitHub Pages 또는 외부 서버와 동기화하는 작업을 자동화할 수도 있다.

워크플로 문법과 구조[편집 | 원본 편집]

GitHub Actions의 워크플로 파일은 `.github/workflows/` 디렉터리에 위치하며, YAML 문법으로 작성된다. 워크플로는 크게 다음과 같은 구조로 이루어진다:

  • name: 워크플로의 이름
  • on: 워크플로를 트리거하는 이벤트 (예: push, pull_request, schedule 등)
  • jobs: 실행할 작업(Job)들의 집합

예시:

name: Example Workflow

on:
  push:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run test
        run: echo "Hello, world"

트리거(on:)[편집 | 원본 편집]

워크플로를 어떤 이벤트에서 실행할지 정의한다. 주요 이벤트는 다음과 같다:

  • push: 특정 브랜치로 푸시될 때 실행
  • pull_request: PR 생성 또는 변경 시 실행
  • schedule: cron 표현식 기반의 정기 실행
  • workflow_dispatch: 수동 실행을 허용 (UI에서 버튼 클릭)
  • repository_dispatch: 외부 시스템에서 API 호출로 실행

복수 이벤트를 조합할 수도 있다.

잡(Jobs)[편집 | 원본 편집]

jobs 아래에는 하나 이상의 작업 단위(Job)가 정의되며, 각 job은 독립적인 실행 환경에서 병렬 실행된다. Job 내부에는 다음을 포함할 수 있다:

  • runs-on: 해당 작업을 실행할 러너 환경 (예: ubuntu-latest)
  • needs: 다른 job이 완료된 후 실행되도록 설정
  • steps: 각 job에서 실행될 구체적인 명령 또는 액션

매트릭스 전략[편집 | 원본 편집]

matrix 키워드를 사용하면 하나의 job을 다양한 변수 조합으로 반복 실행할 수 있다. 주로 Python, Node.js 등 다양한 런타임 버전에서 테스트를 수행할 때 활용된다.

strategy:
  matrix:
    python-version: [3.9, 3.10, 3.11]

러너(Runners)[편집 | 원본 편집]

러너는 워크플로를 실제로 실행하는 머신이다. GitHub에서는 다음을 지원한다:

  • GitHub 호스팅 러너: GitHub에서 제공하는 가상 머신
  • 자체 호스팅 러너: 사용자가 직접 구성한 서버 또는 환경

러너는 매 실행마다 클린 환경으로 시작되며, 각 job은 독립적으로 수행된다.

스텝(Steps)[편집 | 원본 편집]

각 job은 여러 개의 step으로 구성되며, step은 순차적으로 실행된다. step은 다음 중 하나를 실행할 수 있다:

  • run: 셸 명령 실행
  • uses: 기존에 등록된 액션을 불러와 실행
  • with / env: 액션 또는 명령 실행 시 사용할 인자 또는 환경 변수 설정

예:

- name: Run tests
  run: pytest
  env:
    DATABASE_URL: postgresql://localhost/test

액션(Actions)[편집 | 원본 편집]

GitHub Actions에서는 steps에서 `uses` 키워드를 사용해 재사용 가능한 액션을 호출할 수 있다.

  • actions/checkout: 저장소 코드를 체크아웃
  • actions/setup-python: 파이썬 런타임 설정
  • codecov/codecov-action: 테스트 커버리지 업로드

마켓플레이스에서 수천 개의 액션을 제공하며, 사용자가 직접 정의한 커스텀 액션도 사용할 수 있다.

환경 변수와 시크릿[편집 | 원본 편집]

워크플로에서 민감한 정보를 다뤄야 할 경우, GitHub의 Secrets 기능을 활용한다.

  • `env:`를 통해 환경 변수를 직접 설정하거나
  • `secrets.MY_SECRET` 형식으로 GitHub 저장소 설정에 등록된 시크릿 값을 참조할 수 있다

예:

env:
  API_KEY: ${{ secrets.API_KEY }}

조건 실행 (조건문)[편집 | 원본 편집]

워크플로, job, step 단위에서 조건을 설정할 수 있다.

예:

if: github.event_name == 'push'

또는 테스트가 실패해도 다음 단계를 실행하게 하고 싶을 때:

continue-on-error: true

재사용 가능한 워크플로[편집 | 원본 편집]

workflow_call 이벤트를 사용하면 다른 워크플로를 호출할 수 있다. 예를 들어 공통 빌드, 배포, 테스트 단계를 재사용 워크플로로 만들어 둘 수 있다.

on:
  workflow_call:
    inputs:
      app_name:
        required: true
        type: string

워크플로 디버깅[편집 | 원본 편집]

실행 로그는 GitHub Actions UI에서 확인할 수 있으며, 각 step의 실행 결과 및 출력이 기록된다. `run: echo` 등을 활용해 중간 변수나 상태를 출력하며 디버깅할 수 있다.

제한과 고려사항[편집 | 원본 편집]

  • 워크플로우가 복잡해질수록 유지보수가 어려울 수 있음
  • 실행 시간, 리소스, 요금제에 따른 제한 존재
  • 시크릿 관리 실수로 인한 보안 위험 발생 가능
  • 예기치 않은 실행 오류가 발생할 수 있어 감시 및 대응 체계 필요

같이 보기[편집 | 원본 편집]

각주[편집 | 원본 편집]