Post

GitHub Actions 심화 내용 및 활용 사례

GitHub Actions의 심화 개념과 활용 사례를 살펴보고, 이를 실제 프로젝트에서 효과적으로 적용하는 방법을 설명

GitHub Actions 심화 내용 및 활용 사례

GitHub Actions는 단순한 CI/CD 자동화 도구를 넘어, 복잡한 개발 프로세스를 효율적으로 관리할 수 있는 다양한 기능을 제공합니다.

1. GitHub Actions 심화 개념

Matrix Strategy (매트릭스 전략)

Matrix Strategy를 사용하면 하나의 Workflow에서 여러 환경에서 테스트를 병렬 실행할 수 있습니다.

활용 예시: 다양한 OS, Python 버전에서 테스트 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
jobs:
  test:
    runs-on: $
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        python-version: [3.8, 3.9, 3.10]
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: $
      - name: Run tests
        run: pytest

이 코드가 하는 일

  • Ubuntu, Windows, macOS 환경에서 테스트 실행
  • Python 3.8, 3.9, 3.10 버전에서 각각 실행 → 총 9개의 테스트 실행

Reusable Workflows (재사용 가능한 워크플로우)

Workflow가 복잡해질수록 반복되는 코드가 많아질 수 있습니다. GitHub Actions는 workflow_call을 통해 재사용 가능한 Workflow를 지원합니다.

활용 예시: 여러 저장소에서 공통 CI/CD 로직 재사용

📁 .github/workflows/common-ci.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name: Common CI Workflow
on:
  workflow_call:
    inputs:
      node-version:
        required: true
        type: string
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: $
      - run: npm install && npm test

📁 .github/workflows/main.yml (재사용)

1
2
3
4
5
6
7
name: Main CI Workflow
on: [push, pull_request]
jobs:
  call-common-ci:
    uses: ./.github/workflows/common-ci.yml
    with:
      node-version: '16'

이 코드가 하는 일

  • common-ci.yml을 재사용하여 main.yml에서 CI 실행
  • node-version: '16'을 입력으로 전달하여 유연하게 설정 가능

Self-hosted Runner (셀프 호스팅 러너)

GitHub Actions는 기본적으로 GitHub-hosted Runner를 사용하지만, 더 강력한 성능이나 특정 환경이 필요할 경우 Self-hosted Runner를 활용할 수 있습니다.

활용 예시: 내부 네트워크에서 실행해야 하는 경우

1. Self-hosted Runner 설정

1
2
3
4
5
mkdir actions-runner && cd actions-runner
curl -o actions-runner-linux-x64.tar.gz -L https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
tar xzf ./actions-runner-linux-x64.tar.gz
./config.sh --url https://github.com/your-repo --token YOUR_TOKEN
./run.sh

2. Workflow에서 Self-hosted Runner 사용

1
2
3
4
5
6
jobs:
  deploy:
    runs-on: self-hosted
    steps:
      - name: Deploy to internal server
        run: ./deploy-script.sh

이 코드가 하는 일

  • Self-hosted Runner에서 Workflow 실행
  • ./deploy-script.sh를 실행하여 내부 서버에 배포

2. GitHub Actions 활용 사례

1. Secret Management (보안 관리)

배포 과정에서 API 키나 SSH 키 같은 민감한 정보를 GitHub Secrets에 안전하게 저장할 수 있습니다.

활용 예시: SSH 키를 GitHub Secrets로 저장 후 배포

1
2
3
4
5
6
7
8
env:
  SSH_PRIVATE_KEY: $
steps:
  - name: Deploy
    run: |
      echo "$SSH_PRIVATE_KEY" > private_key && chmod 600 private_key
      scp -i private_key -r ./dist user@server:/var/www/project
      ssh -i private_key user@server "systemctl restart nginx"

보안 유지 방법

  • GitHub Secrets를 활용하여 보안 관리
  • echo를 사용하여 SSH 키를 안전하게 처리

2. GitHub Actions vs Jenkins 비교

기능GitHub ActionsJenkins
설정 방법YAML 파일UI 또는 Groovy 스크립트
호스팅 방식GitHub에서 제공자체 서버 필요
확장성GitHub Marketplace 활용플러그인 필요
비용GitHub-hosted Runner 기본 제공자체 서버 유지 비용 발생

GitHub Actions가 적합한 경우

  • GitHub 저장소와 통합된 간단한 CI/CD 환경이 필요할 때
  • 다양한 오픈소스 Actions를 쉽게 활용하고 싶을 때

Jenkins가 적합한 경우

  • 복잡한 빌드 및 배포 파이프라인을 구성해야 할 때
  • GitHub 이외의 다양한 SCM과 통합해야 할 때

3. 마무리

GitHub Actions 심화 내용을 정리하면?

  1. Matrix Strategy: 여러 환경에서 테스트 병렬 실행
  2. Reusable Workflows: 반복되는 CI/CD 코드를 재사용
  3. Self-hosted Runner: 사용자 지정 환경에서 실행 가능
  4. Secret Management: GitHub Secrets를 활용한 보안 관리
  5. GitHub Actions vs Jenkins 비교: 적절한 도구 선택 가이드 제공
This post is licensed under CC BY 4.0 by the author.