[Travis-CI | flake8] Build a Backend REST API - 6

Hyeseong·2021년 2월 22일
0
post-thumbnail

참고사항

아래 사항은 콘다 가상환경에 관한 부분으로 이미 숙지 하신 분은 넘어가주세요.

노트북은 윈도우 파이썬 환경이며, AWS EC2의 경우 콘다 가상환경으로 현재 사용 중에 있어서, 또한 통일된 python 버전이 아닙니다.

이에 추후 dependencies 문제가 우려되어 일단 밑작업으로 통합을 했는데요.

그 과정에 알게된 명령어와 방식들을 한토막으로 정리하고 본론으로 들어갈게요.

파이썬 버전 확인

python -V
일반 파이썬이나 콘다에서 동일하게 버전을 확인 할 수 있어요.

콘다 가상환경 생성후 버전 확인

conda create -n 가상환경이름 python=버전넘버

python -V
ex. python 3.9.1

만약 하나하나 바꾸고 싶지 않으면 기본 콘다 python을 변경할 수 있다고 하네요.

conda install python=버전넘버 # global하게 설치하는 부분인듯?!
이렇게 하면 내가 원하는 버전을 전역으로 설치하고(자주 가상환경에서도 설치하는 녀석으로) 가상환경 생성시에도 추가로 파이썬 버전을 명시하는 것을 조금은?! 덜 수 있다. 단 다운그레이드 하거나 특정 버전을 명시할 경우에는 반드시 작성해야 할 것으로 생각됨.


본론

Travis-CI 소개

소용환님이 작성한 글Travis-CI 소개

파일 작성

.travis.yml
Dockerfile 작성한 것과 비슷한 문법 구조를 가지고 있어요. yaml파일이거든요.

결론은 루트 디렉토리에 아래와 같이 .travis.yml 숨긴파일을 만들거에요.

language: python # 어떤 언어를 사용할지 정의
python:		     # 사용 할 언어의 구체적 버전 정의
  - "3.?"

services:		 # 서비스 정의
  - docker

before_script: pip install docker-compose   # 자동화 명령이 실행되기 전 밑 작업이필요해요. 

script: 
  - docker-compose run app sh -c "python manage.py test && flake8"
# TDD로 진행하는 만큼 test 명령어와 linting 툴중에 하나인 flake8을 이용하게합니다.

그래서 결국 push 할때마다 github repo에서 상태 변경을 Travis CI가 알아차리고 자동으로 test를 해주고 flak8툴을 이용해서 파이썬 린팅까지 해주게 되요.

git add .
git commit -m '~~~'
git push 하게 될 경우 트레비스에서 트레비스파일을 확인하고 설정들어가면서 빌드해주는데요.

저는 슬프지만 아래와 같이 오류가 떳어요. 다른 분들은 한방에 성공하길 빌게요.(flake8에서 오류를 잡아낸것 같은데, exclude변수에서 우항의 값들을 정렬하면서 콤마가 빠지는 실수를 했네요.)

flake8 일단 작성

/recipe-app/app/.flake8

[flake8]
exclude =
  migrations,
  __pycache__,
  manage.py,
  settings.py

flake 소개

전현준님이 작성한 글 flake8

flake8은 무엇인가?

flake8은 파이썬 패키지 중 하나로, 폴더 안의 파이썬 파일이나 특정 파이썬 파일의 코드 스타일을 검사해주는 도구이다. 기본적으로 PEP8(Python Enhance Proposal 8)의 코드 스타일 가이드(코딩 컨벤션) 대로 검사해주며, 원하는 가이드만 설정하여 검사시킬 수도 있다.

flake8 설치하기

아래 명령어로 설치할 수 있다.

$ pip install flake8

flake8으로 검사하기

우선 파이썬 코드를 코딩 컨벤션을 신경쓰지 않고 아무렇게나 작성해보겠다.

test.py

def print_helloworld():
	print("Hello world!")

print_helloworld()
a=1
a+=1
print(a)

그 뒤에 flake8을 이용하여 test.py의 코딩 컨벤션을 검사해보겠다.

$ flake8 test.py

파일명에는 디렉토리명이 들어가도 되며, 디렉토리명이 들어갔을 시에는 디렉토리 내부에 있는 모든 파이썬 파일을 검사한다. 아래는 검사 결과이다.

test.py:2:1: W191 indentation contains tabs
test.py:5:2: E225 missing whitespace around operator
test.py:6:2: E225 missing whitespace around operator
test.py:7:9: W292 no newline at end of file

결과에는 파일 이름, 줄 번호, 글자 번호, 가이드 코드(?), 가이드 설명이 차례로 나온다.

flake8 설정

프로젝트마다 다르게 규칙을 정해야 하거나, 일부 규칙만 빼고 검사하길 원할 수도 있을 것이다. 그러기 위해서는 설정 파일을 만들어야 한다.

먼저 기본으로 적용되는 글로벌 검사를 설정하려면, 윈도우에서는 사용자 기본 폴더에 .flake파일을 (~/.flake) 만들어야 하고, 맥이나 리눅스에서는 config폴더 안에 .flake파일을(~/config/.flake) 만들어야 한다.

다음으로 하나의 디렉토레 내의 검사를 설정하려면, 그 루트 디렉토리에 .flake8, tox.ini, setup.cfg 중 하나의 파일을 만들면 된다.

설정 파일의 예시는 아래에 나와있다.

.flake8

[flake8]
# F812: list comprehension redefines ...
# H101: Use TODO(NAME)
# H202: assertRaises Exception too broad
# H233: Python 3.x incompatible use of print operator
# H301: one import per line
# H306: imports not in alphabetical order (time, os)
# H401: docstring should not start with a space
# H403: multi line docstrings should end on a new line
# H404: multi line docstring should start without a leading new line
# H405: multi line docstring summary not separated with an empty line
# H501: Do not use self.__dict__ for string formatting

ignore = F812,H101,H202,H233
exclude =
    # No need to traverse our git directory
    .git,
    # There's no value in checking cache directories
    __pycache__,
    # The conf file is mostly autogenerated, ignore it
    docs/source/conf.py,
    # The old directory contains Flake8 2.0
    old,
    # This contains our built documentation
    build,
    # This contains builds of flake8 that we don't want to check
    dist
max-complexity = 10

중요한 점은 맨 위에 [flake8]을 넣어야 한다는 것이다. 이것을 하지 않으면 flake8이라고 인식하지 못하기 때문이다.

ignore에는 사용하지 않을 가이드를 넣고, exclude에는 검사하지 않을 파일이나 디렉토리 Path를 넣는다.

더 자세한 설정 방법은 flake8 홈페이지를 참조하기 바란다.

CI/CD는 무엇?

CI

"CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다. CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.

CD

"CD"는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 합니다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결합니다. 결국, 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공이 가진 장점을 활용합니다.
참고 - redhat.com

참고 링크

https://blog2.lucent.me/vim/vim-flake8/
https://flake8.pycqa.org/en/latest/index.html#

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글