[CI/CD] Git hub Action으로 Python 빌드 테스트
Git hub Action에 대한 자세한 설명은 앞선 포스팅을 참고
https://heywantodo.tistory.com/154
WorkFlow 만들기
당연하지만 Repository가 있어야 한다.
나는 Python Code 테스트를 하는 Workflow를 생성해볼 것이다.
repository의 action 탭을 클릭해보면 현재 내 코드를 보고 추천을 해준다.
나는 Flask 기반 웹 페이지를 Push했기 때문에 Flask를 검색하니
Python Application을 테스트하는 Workflow를 보여준다.
Configure를 클릭하면 yml 파일을 생성해준다.
하나하나씩 천천히 살펴보자.
yml파일 구성
1. Event 정의
Workflow의 name은 Python applications이며
master branch에서 Push나 Pull_request 이벤트가 발생하면 자동으로 Workflow가 실행된다.
name: Python application
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
2. Jobs 정의
Workflow의 작업을 빌드한다.
Jobs에서 실행되는 단계(Steps)는 순서대로 실행되며 서로 의존적이다.
Workflow 테스트가 진행되는 OS는 ubuntu의 최신 버전이다.
jobs:
build:
runs-on: ubuntu-latest
3. Steps 정의
이제 Steps를 차례로 정의해주면 된다.
파이썬 3.10 버전에서 테스트가 이루어져하기 때문에, Python3를 설치하는 단계를 먼저 정의해준다.
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
다음 단계는 dependencies 즉 의존성 패키지를 설치해준다.
먼저 테스트를 위한 flake8과 pytest 패키지를 설치해준다.
requirements.txt 파일이 있으면 참조해서 설치를 하고, 아니라면 직접 지정을 해주면 된다.
나는 repository에 requirements.txt 파일이 있기 때문에 따로 지정을 해주진 않았다.
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
다음 단계에선 flak8로 코드 정적 분석을 실행한다.
🔎flake8
파이썬의 코드 스타일을 통일하고, 잠재적인 버그를 줄이기 위한 코드 정적 분석기
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
마지막 단계에선 pytest로 테스트한다.
🔎pytest
파이썬에서 TDD (Test Driven Development)를 하기 위해 나온 프레임워크
- name: Test with pytest
run: |
pytest login.py
파일이 다 작성되고나면 .github/workflows 경로에 commit을 해주면 된다.
나는 gihub가 제공해준 베이스를 토대로 web에서 작성을 했기때문에 바로 커밋했다.
Action
commit을 한 후 Action tab에 들어가면 commit한 Workflow들이 보인다.
나는 이미 테스트를 한 상태이기때문에 2개가 보인다.
클릭하면 이 화면이 보일텐데 build를 누르면 로그가 보인다.
나같은 경우는 pytest로 테스트하는 단계에서 Fail이 떴는데
Error 로그를 확인하면 페이징 기능을하는 flask_paginate 모듈이 없다고한다.
requirements.txt에서 누락이 된 것 같음
현재 페이징 기능은 구현을 하지 않았기때문에 삭제하고 push를 하면
Push 이벤트가 발생했기때문에 자동으로 빌드를 한다
Pytest 단계에서 테스트 할 함수를 작성하지 않았기때문에, 검사할게 없다는 Error가 발생
당장 단위 테스트 함수를 짜는 것은 너무나 귀찮았기에 Skip 🤣
아무튼 성공하면 Build가 파란 체크로 바뀌고
로그도 확인해보면 이슈가 없을시 Complate job이 뜬다.
Test가 끝난 애플리케이션을 Docker Repository에 푸쉬하거나, ECR, GKE에 배포하는 등
다양한 기능이 있던데 아무쪼록 잘 활용하면 좋을 듯 😉
'💽 CICD > Git' 카테고리의 다른 글
[Git] 상태(status) 확인하기 (0) | 2023.11.13 |
---|---|
[Git] 특정 브랜치 clone 하기 (0) | 2023.09.11 |
[CI/CD] Git hub Action (0) | 2023.07.24 |
[Git] 원격 저장소 Commit 취소하기 (0) | 2023.07.23 |
[Git] 하위 폴더만 클론 하기 (0) | 2023.07.21 |