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 Actions | Jenkins |
---|---|---|
설정 방법 | YAML 파일 | UI 또는 Groovy 스크립트 |
호스팅 방식 | GitHub에서 제공 | 자체 서버 필요 |
확장성 | GitHub Marketplace 활용 | 플러그인 필요 |
비용 | GitHub-hosted Runner 기본 제공 | 자체 서버 유지 비용 발생 |
GitHub Actions가 적합한 경우
- GitHub 저장소와 통합된 간단한 CI/CD 환경이 필요할 때
- 다양한 오픈소스 Actions를 쉽게 활용하고 싶을 때
Jenkins가 적합한 경우
- 복잡한 빌드 및 배포 파이프라인을 구성해야 할 때
- GitHub 이외의 다양한 SCM과 통합해야 할 때
3. 마무리
GitHub Actions 심화 내용을 정리하면?
- Matrix Strategy: 여러 환경에서 테스트 병렬 실행
- Reusable Workflows: 반복되는 CI/CD 코드를 재사용
- Self-hosted Runner: 사용자 지정 환경에서 실행 가능
- Secret Management: GitHub Secrets를 활용한 보안 관리
- GitHub Actions vs Jenkins 비교: 적절한 도구 선택 가이드 제공