본문 바로가기

DevOps/Git

[Github Actions]Github Actions의 주요 구성 요소

GitHub Actions 정의

GitHub Actions는 소프트웨어 개발 워크플로우를 자동화할 수 있게 해주는 CI/CD(지속적 통합/지속적 배포) 플랫폼입니다. 이 도구를 사용하면 코드 저장소 내에서 직접 빌드, 테스트, 배포 파이프라인을 구축하고 관리할 수 있습니다.

Github Actions Components

GitHub Actions는 다음과 같은 주요 구성 요소로 이루어져 있습니다:

  1. Workflow
  2. Event
  3. Job
  4. Step
  5. Action
  6. Runner

이들은 서로 연결되어 자동화된 프로세스를 구성합니다. 각 구성 요소에 대해 자세히 살펴보겠습니다.

https://docs.github.com/en/actions/using-workflows/about-workflows#workflow-basics

Workflow

github workflows doc https://docs.github.com/en/actions/using-workflows/about-workflows

Workflow는 GitHub Actions의 가장 상위 개념으로, 전체 자동화 프로세스를 정의합니다.

  • 정의: 하나 이상의 Job으로 구성된 자동화된 프로세스입니다.
  • 저장 위치: .github/workflows 디렉토리에 YAML 파일로 저장됩니다.
  • 실행 조건: 특정 Event에 의해 트리거되거나 스케줄에 따라 실행될 수 있습니다.
  • 구조: 여러 Job을 포함할 수 있으며, 기본적으로 Job들은 병렬로 실행됩니다.

예시:

name: CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm ci
      - run: npm test

이 예시 Workflow는 main 브랜치에 push되거나 PR이 생성될 때 실행되며, Node.js 환경을 설정하고 테스트를 실행합니다.

Events

Trigger workflows doc https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#about-events-that-trigger-workflows

Event는 Workflow를 트리거하는 특정 활동이나 규칙을 의미합니다.

  • 종류:
    • Repository Event: push, pull request, issue 생성 등
    • 외부 Event: 외부 서비스의 webhook
    • 예약된 Event: cron 형식으로 정의된 스케줄
  • 사용 예:
    • 코드 푸시 시 자동으로 테스트 실행
    • PR 생성 시 코드 리뷰 봇 실행
    • 매일 밤 데이터베이스 백업

예시:

on:
  push:
    branches: [ main ]
  pull_request:
    types: [opened, synchronize, reopened]
  schedule:
    - cron: '0 2 * * *'

이 설정은 main 브랜치로의 push, PR 생성/업데이트, 그리고 매일 오전 2시에 Workflow를 실행합니다.

Job

Event는 Workflow를 트리거하는 특정 활동이나 규칙을 의미합니다.

  • 종류:
    • Repository Event: push, pull request, issue 생성 등
    • 외부 Event: 외부 서비스의 webhook
    • 예약된 Event: cron 형식으로 정의된 스케줄
  • 사용 예:
    • 코드 푸시 시 자동으로 테스트 실행
    • PR 생성 시 코드 리뷰 봇 실행
    • 매일 밤 데이터베이스 백업

예시:

on:
  push:
    branches: [ main ]
  pull_request:
    types: [opened, synchronize, reopened]
  schedule:
    - cron: '0 2 * * *'

이 설정은 main 브랜치로의 push, PR 생성/업데이트, 그리고 매일 오전 2시에 Workflow를 실행합니다.

Step

Step은 Job 내에서 실행되는 개별 작업입니다.

  • 구성:
    • Shell 명령어 실행
    • Action 실행
  • 특징:
    • 동일한 Runner에서 실행되므로 데이터를 공유할 수 있습니다.
    • 순차적으로 실행됩니다.
    • steps의 uses는 어떤 액션을 사용할지 지정함.
      • 이미 만들어진 액션을 사용할 때 지정
    • 각 Step들 끼리는 data를 공유할 수 있다.

예시:

steps:
  - name: Check out repository
    uses: actions/checkout@v3
  - name: Set up Python
    uses: actions/setup-python@v4
    with:
      python-version: '3.9'
  - name: Install dependencies
    run: |
      python -m pip install --upgrade pip
      pip install -r requirements.txt
  - name: Run tests
    run: python -m unittest discover tests

이 예시에서는 코드 체크아웃, Python 설정, 의존성 설치, 테스트 실행의 4단계가 순차적으로 실행됩니다.

Action

markgetplace https://github.com/marketplace?type=actions

Action은 Workflow에서 자주 반복되는 작업을 재사용 가능한 단위로 만든 것입니다.

  • 특징:
    • GitHub Marketplace에서 다양한 Action을 찾아 사용할 수 있습니다.
    • 커스텀 Action을 만들어 사용할 수도 있습니다.
  • 사용 방법: uses 키워드를 통해 특정 Action을 사용할 수 있습니다.

예시:

steps:
  - name: Deploy to Heroku
    uses: AkhileshNS/heroku-deploy@v3.12.14
    with:
      heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
      heroku_app_name: "your-app-name"
      heroku_email: "your-email@example.com"

이 예시는 Heroku 배포를 위한 커뮤니티 Action을 사용하는 방법을 보여줍니다.

Runners

self hosted runners doc https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners

Runner는 Workflow Job을 실행하는 서버입니다.

  • 종류:
    • GitHub-hosted runners: GitHub에서 제공하는 가상 머신
    • Self-hosted runners: 직접 설정 및 관리하는 머신
  • 특징:
    • GitHub-hosted runners는 매 Job마다 새로운 인스턴스를 사용합니다.
    • Self-hosted runners는 특별한 하드웨어나 OS가 필요한 경우 유용합니다.

예시 (GitHub-hosted runner 사용):

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run a one-line script
        run: echo Hello, world!

예시 (Self-hosted runner 사용):

jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v3
      - name: Run a one-line script
        run: echo Hello, world!

각 구성 요소는 서로 유기적으로 연결되어 강력한 CI/CD 파이프라인을 구성할 수 있게 해줍니다. 실제 프로젝트에서는 이러한 구성 요소들을 조합하여 복잡한 워크플로우를 자동화할 수 있습니다.

'DevOps > Git' 카테고리의 다른 글

[Gitlab]Install / Backup / Restore Gitlab  (0) 2022.05.02
[Git]What is GitOps?  (0) 2022.05.02