Github Actions 동작 원리

728x90

Github Actions는 프로젝트 내에서 자동화된 작업을 실행할 수 있게 해주는 CI/CD 도구이다. 이 도구는 커밋, 풀 리퀘스트, 이슈 생성 등 다양한 이벤트를 기준으로 동작하여 개발자가 설정한 자동화 흐름을 실행할 수 있다.

---Github Actions 공식 가이드---
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼입니다. 리포지토리에 대한 모든 끌어오기 요청을 빌드 및 테스트하거나 병합된 끌어오기 요청을 프로덕션에 배포하는 워크플로를 만들 수 있습니다.
GitHub Actions은(는) 단순한 DevOps 수준을 넘어 리포지토리에서 다른 이벤트가 발생할 때 워크플로를 실행할 수 있도록 합니다. 예를 들어 누군가가 리포지토리에서 새 이슈를 만들 때마다 워크플로를 실행하여 적절한 레이블을 자동으로 추가할 수 있습니다.
GitHub에서 워크플로를 실행할 Linux, Windows, macOS 가상 머신을 제공하거나, 사용자 고유의 데이터 센터 또는 클라우드 인프라에서 자체 호스트형 실행기를 호스트할 수 있습니다.

Github Actions의 구성 요소

  • Event: Github Actions에서 작업이 언제 실행될지를 결정하는 트리거이다. 코드가 저장소에 푸시(push)되거나 풀 리퀘스트(pull request)가 생성될 때 작업이 실행되도록 설정할 수 있다.
  • Runner: 작업(Job)을 실행하는 환경으로 가상 머신(VM) 또는 컨테이너(Container)를 사용한다. Github에서 제공하는 기본 Runner를 사용하거나 직접 설정한 Runner를 사용할 수도 있다.
  • Job: 하나의 작업 단위로 여러 Step으로 이루어진다. 각각의 Job은 독립적으로 실행되며 여러 Job을 병렬로 실행할 수 있다.
    • 기본적으로 jobs는 병렬로 실행되지만, 특정 Job이 다른 Job의 완료를 기다리도록 설정할 수 있다.
  • Step은 Job을 구성하는 작은 작업 단위로 각 Step은 명령어(Command) 또는 스크립트(Script)를 실행하거나 다른 사용자가 작성한 재사용 가능한 Action을 호출하는 방식으로 구성된다. Step에서는 두 가지 주요 요소를 사용할 수 있다.
    • run: 사용자가 직접 작성한 명령을 실행한다.
    • uses: GitHub 커뮤니티나 공식에서 제공하는 액션을 불러와 사용할 수 있다.
  • Action: Github 커뮤니티에서 공유된 작업의 모음으로 여러 번 반복적으로 사용되는 코드를 Action으로 만들어 쉽게 재사용할 수 있다. Action을 사용하면 동일한 작업을 일일이 작성할 필요 없이 간단하게 가져다 쓸 수 있다.

 

Workflow 구성요소

Workflow는 자동화 작업의 전체 흐름을 정의하는 가장 상위 개념이다. 하나 이상의 작업을 실행하도록 구성된 자동화된 프로세스이다.

Workflow는 .github/workflows폴더 내에 YAML 파일로 정의된다. 또한 하나의 프로젝트에는 n개의 Workflow를 생성할 수 있다.

워크플로우 예시

name: CI Workflow
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

주요 속성

on: Event 설정

  • 브랜치 기준: 특정 브랜치에 이벤트가 발생했을 때 작업을 수행한다. (main 브랜치에 push가 일어나면 워크플로우가 실행)
on: push: branches: - main
  • 이슈 기준: 이슈가 생성되거나 수정될 때 워크플로우가 실행됩니다.
on: issues: types: [opened, edited]
  • 시간 기준: cron을 사용해 주기적인 작업을 설정할 수 있습니다.
on: schedule: - cron: "0 0 * * *" # 매일 자정에 실행

 

jobs: Job 설정

각 워크플로우는 하나 이상의 Job으로 구성되고 각 Job은 독립적으로 실행된다. Job은 여러 Step을 포함하며 기본적으로 병렬로 실행된다.

 

runs-on: Runner 설정

각 Job은 Runner를 통해 실행된다. Runner는 특정 운영 체제에서 Job을 실행할 환경을 제공한다. ubuntu-latest는 최신 우분투 환경에서 실행됨을 의미한다.

build:
    runs-on: ubuntu-latest

 

steps: Step 설정

Job 내에서 실행되는 개별 작업 단계로 각 Step은 명령어(Command) 또는 스크립트(Script)를 실행하거나 다른 사람이 만들어둔 Action을 가져와 사용할 수 있다.

steps:
  - uses: actions/checkout@v4  # 코드를 체크아웃
  - run: npm install            # npm 의존성 설치
  - run: npm test               # 테스트 실행

 

 

참고문헌

 

GitHub Actions 설명서 - GitHub Docs

GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완

docs.github.com

 

728x90

'DevOps' 카테고리의 다른 글

Github Actions로 간단하게 CI 구축하고 Docker로 배포하기  (7) 2024.10.18
CI/CD 란 무엇인가?  (2) 2024.10.15
Docker의 개념  (3) 2024.10.15