2 min to read
[Django] GitHub CI에 Django Test 및 Redis 적용하기
GitHub CI, Django, Test, Redis
[Django] GitHub CI에 Django Test 및 Redis 적용하기
1. GitHub CI란?
-
우선 CI란 Continuous Integration의 준말로 테스트, 웹 크롤링 등 로컬에서 직접 수행하던 작업을 자동화하여 충돌 문제를 미연에 방지하는 프로세스를 뜻한다.
-
새로운 버젼의 웹/앱 서비스를 배포하고 싶을 때 일일히 AWS, GCP, Kubernetes 등의 클라우드 시스템을 거치지 않고 GitHub에서 PR된 브랜치를 Merge할 때 자동으로 배포하도록 하는 CD (Continuous Deployment 또는 Continuous Delivery) 개념도 존재한다. CD의 경우 추후 알아보도록 한다. CI와 CD에 대한 설명 및 차이는 redhat 홈페이지에서 자세히 설명하고 있다.
- GitHub에서는 일정 기준까지 무료로 CI 기능을 제공하고 있다. 각 Repository의 Pull Requests 탭 오른쪽에 존재하는 Actions가 바로 그 주인공이다.
- Actions를 클릭하여 들어가보면 각 언어 및 프레임워크를 설정할 때 사용하면 편한 템플릿을 제공하고 있어 사용자의 서비스에 따라 선택하면 된다. 필자는 Django로 Backend를 구현하고 있어 Django workflow file을 선택했다.
GitHub Blog를 만들기 위해 사용하는 jekyll.yml도 존재한다.
다음은 workflow를 추천받지 않고 스스로 설정하고자 했을 때 만들어지는 default main.yml의 모습이다.
2. Django Workflows 뜯어보기
- 백문이 불여일견이라 했으니 내가 직접 짠 workflow를 살펴보도록 하자.
name: Django CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
test-host:
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: [ 3.8.3 ]
services:
mysql:
image: mysql:5.7
env:
MYSQL_ALLOW_EMPTY_PASSWORD: yes
MYSQL_DATABASE: 'waffle_backend_assignment_2'
MYSQL_USER: 'waffle-backend'
MYSQL_PASSWORD: 'seminar'
MYSQL_ROOT_PASSWORD: 1234
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
redis:
image: redis
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v2
- name: Verify MySQL connection
run: |
mysql --version
mysql --host 127.0.0.1 --port 3306 -u root -p1234 -e "SHOW DATABASES"
- name: Set up Python 3.8.3
uses: actions/setup-python@v2
with:
python-version: 3.8.3
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run migrations
run: |
cd waffle_backend
python manage.py migrate
- name: Run Tests
run: |
cd waffle_backend
mysql --host 127.0.0.1 --port 3306 -u root -p1234 -e "grant all privileges on test_waffle_backend_assignment_2.* to 'waffle-backend'@'%';"
python manage.py test
env:
SYSTEM_ENV: GITHUB_WORKFLOW
Comments