Post

GitHub Actions로 CI (Continuous Integration) 설정하기

GitHub Actions를 활용하여 CI 파이프라인을 설정하는 방법을 단계별로 설명

GitHub Actions로 CI (Continuous Integration) 설정하기

소프트웨어 개발에서 지속적 통합(Continuous Integration, CI) 은 코드 변경 사항을 자주, 자동으로 테스트하고 병합하는 중요한 과정입니다. GitHub Actions를 사용하면 코드 변경이 있을 때마다 자동으로 테스트를 실행하고, 빌드를 검증할 수 있습니다.

1. CI(Continuous Integration)란?

CI(지속적 통합) 개념

지속적 통합(CI)은 코드 변경 사항이 발생할 때마다 자동으로 빌드 및 테스트를 수행하는 프로세스입니다. 이를 통해 코드 품질을 유지하고, 버그를 조기에 발견할 수 있습니다.

CI의 주요 목표

  • 자동화된 테스트를 통해 코드의 안정성을 보장
  • 팀원 간의 코드 변경 사항을 빠르게 통합
  • 버그를 조기에 감지하여 해결 비용 절감

CI와 GitHub Actions

GitHub Actions는 CI/CD를 자동화하는 도구로, GitHub 저장소 내에서 손쉽게 CI 프로세스를 설정할 수 있습니다.

2. GitHub Actions로 CI 설정하기

.github/workflows/ 폴더 생성

GitHub Actions에서 CI를 실행하려면 .github/workflows/ 폴더 내에 YAML 파일을 작성해야 합니다.

📁 프로젝트 구조 예시

1
2
3
4
5
6
📂 my-project/
├── 📂 .github/
│   └── 📂 workflows/
│       └── ci.yml  # CI 워크플로우 파일
├── 📂 src/
└── 📄 README.md

3. CI Workflow 작성하기

기본 CI Workflow 예제 (ci.yml)

아래는 GitHub Actions를 사용하여 CI를 설정하는 기본적인 Workflow 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
name: CI Workflow  # 워크플로우 이름

on: [push, pull_request]  # 코드가 푸시되거나 PR이 생성될 때 실행

jobs:
  test:
    runs-on: ubuntu-latest  # 실행 환경 지정
    steps:
      - name: Checkout Repository  # 코드 가져오기
        uses: actions/checkout@v4
      
      - name: Set up Python  # 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: pytest

이 Workflow의 동작 방식

  1. 코드가 push 또는 pull request 될 때 실행됨
  2. GitHub에서 제공하는 Ubuntu 실행 환경을 사용
  3. 저장소의 코드를 가져옴 (Checkout)
  4. Python 환경을 설정하고, 패키지를 설치
  5. 테스트 스크립트(pytest) 실행

4. CI Workflow 상세 설명

Workflow 트리거 (on 속성)

CI Workflow가 실행되는 조건을 설정할 수 있습니다.

1
on: [push, pull_request]
  • push: 코드가 푸시될 때 실행됨
  • pull_request: PR이 생성될 때 실행됨

Job과 실행 환경 (jobsruns-on)

1
2
3
jobs:
  test:
    runs-on: ubuntu-latest
  • CI의 각 단계는 Job으로 구성됨
  • runs-on을 사용하여 실행 환경을 지정 (예: ubuntu-latest)

Steps (단계별 실행 내용)

1) 저장소 코드 가져오기

1
2
- name: Checkout Repository
  uses: actions/checkout@v4

GitHub 저장소의 코드를 가져와 CI 환경에서 사용할 수 있도록 합니다.

2) Python 환경 설정

1
2
3
4
- name: Set up Python
  uses: actions/setup-python@v4
  with:
    python-version: '3.9'
  • Python 3.9 버전을 설치하여 테스트 환경을 구성합니다.

3) 패키지 설치

1
2
3
4
- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  • 필요한 의존성 패키지를 설치합니다.

4) 테스트 실행

1
2
- name: Run tests
  run: pytest
  • pytest를 실행하여 코드가 정상 동작하는지 확인합니다.

5. CI 실행 결과 확인

CI Workflow가 실행되면 GitHub에서 실행 결과를 확인할 수 있습니다.

GitHub Actions 실행 로그 확인

  1. GitHub 저장소로 이동
  2. Actions 탭 클릭
  3. 실행된 CI Workflow 선택
  4. 실행 로그를 확인하고, 에러 발생 시 디버깅 가능

6. CI 최적화 및 추가 기능

캐싱을 활용한 속도 최적화 패키지 설치 시간을 줄이기 위해 캐싱을 사용할 수 있습니다.

1
2
3
4
5
6
7
- name: Cache dependencies
  uses: actions/cache@v3
  with:
    path: ~/.cache/pip
    key: $-pip-$
    restore-keys: |
      $-pip-

여러 Python 버전에서 테스트 실행 여러 Python 버전에서 테스트하려면 matrix 전략을 사용할 수 있습니다.

1
2
3
strategy:
  matrix:
    python-version: [3.7, 3.8, 3.9, 3.10]

7. 마무리

GitHub Actions로 CI 설정을 정리하면?

  1. CI는 코드 변경 시 자동으로 테스트를 실행하여 코드 품질을 유지
  2. GitHub Actions의 .github/workflows/ci.yml을 설정하여 CI 파이프라인 구축
  3. 테스트, 패키지 설치, 환경 설정 등의 단계를 포함하여 실행 가능
  4. 실행 결과는 GitHub Actions에서 확인 및 디버깅 가능
  5. 캐싱과 매트릭스 전략을 활용해 CI 최적화 가능
This post is licensed under CC BY 4.0 by the author.