반응형
[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을 선택했다.다음은 workflow를 추천받지 않고 스스로 설정하고자 했을 때 만들어지는 default main.yml의 모습이다.
- GitHub Blog를 만들기 위해 사용하는 jekyll.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
반응형
'Infra & Cloud > DevOps' 카테고리의 다른 글
[Kubernetes] CKA(Certified Kubernetes Administration) 자격증 후기/접수 방법/출제 범위/할인바우처 (+CKAD, CKS 소개) (0) | 2022.11.26 |
---|---|
[Jenkins] Jenkins를 활용한 CI/CD 파이프라인 구축 (4) (0) | 2021.09.10 |
[Jenkins] Jenkins를 활용한 CI/CD 파이프라인 구축 (3) (0) | 2021.09.10 |
[Jenkins] Jenkins를 활용한 CI/CD 파이프라인 구축 (2) (0) | 2021.09.10 |
[Jenkins] Jenkins를 활용한 CI/CD 파이프라인 구축 (1) (0) | 2021.09.10 |
댓글