GitHub Actions로 CI 구현하기
Workflow와 YAML
GitHub Workflow는 코드 변경 같은 이벤트에 반응해서 자동으로 작업을 수행하는 기능으로, 주로 GitHub Actions를 통해 정의합니다. .github/workflows 디렉토리 안에 YAML 파일로 저장합니다. YAML은 JSON, XML처럼 데이터를 구조화하는 형식인데, 문법이 단순해서 읽고 쓰기가 편합니다.
워크플로우 파일의 기본 구성:
name: 워크플로우 이름on: 어떤 이벤트에 실행할지 (예: push)jobs: 실행할 작업들
yaml
name: Basic Workflow Example
on: [push]
jobs:
example_job:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Print Hello
run: echo "Hello, GitHub!"이 파일을 커밋/푸시하면 저장소의 Actions 탭에서 실행 내역을 확인할 수 있습니다. Steps에서 자주 쓰는 속성은 name(단계 이름), run(실행할 명령), uses(미리 만들어진 액션 사용), with(해당 액션에 넘길 인자)입니다.
실전: flake8으로 Python 코드 스타일 CI 만들기
.github/workflows/python-code-style.yaml:
yaml
name: Python CI with flake8
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
style-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v2
with:
python-version: 3.8
- run: |
python -m pip install --upgrade pip
pip install flake8
- run: flake8 .규칙에 어긋나는 코드를 올려서 PR을 만들면 워크플로우가 자동 실행되고, 실패하면 PR 화면에 빨간 x가 뜹니다. Actions 탭에서 어떤 이유로 실패했는지 바로 확인할 수 있고, 코드를 고쳐 다시 push하면 초록 체크로 바뀝니다.
CI 통과를 머지의 필수 조건으로 만들기
CI가 실패해도 지금 상태로는 머지 자체는 막히지 않습니다. 실수로 깨진 코드가 main에 들어갈 수 있는 것이죠. 이를 막으려면:
Settings → Branches → Branch protection rule → Require status checks to pass before merging여기서 워크플로우의 job 이름(style-check)을 필수 체크로 지정하면, 이제 CI를 통과하지 못한 PR은 머지 버튼 자체가 비활성화됩니다.
출처: Codyssey-B1/B2-2