::: IT인터넷 :::

Jenkins 파이썬 빌드 구성의 예제 코드 만들기 (3)

곰탱이푸우 2021. 12. 30. 08:20
파이썬 빌드를 위한 예제 코드를 생성하는 방법에 대해 정리한다.
기능을 정의하고 코드와 테스트를 구현하고, whl (Wheel) 패키지로 빌드하여 배포하는 과정을 다룬다.
 
  1. 기능 정의
  2. 프로젝트 생성
  3. 기능 코드 작성 (srtest)
  4. 테스트 코드 작성 (tests)
  5. 패키지 정의
  6. 테스트
  7. 형상 관리

 

이번 포스팅에서는 6. 테스트와 7. 형상 관리에 대해 다룬다.
 
1. 기능 정의 부터 3. 기능 코드 작성 (srtest) 부분은 아래 포스팅을 참고한다.

또한 4. 테스트 코드 작성 (tests)과 5. 패키지 정의 부분은 아래 포스팅을 참고한다.

 

Jenkins 파이썬 빌드 구성의 예제 코드 만들기 (2)

파이썬 빌드를 위한 예제 코드를 생성하는 방법에 대해 정리한다. 기능을 정의하고 코드와 테스트를 구현하고, whl (Wheel) 패키지로 빌드하여 배포하는 과정을 다룬다. 기능 정의 프로젝트 생성

www.bearpooh.com

 

 

테스트

로컬 테스트

작성한 테스트 코드가 정상적으로 작동하는지 확인할 필요가 있다.
형상 관리 시스템에 커밋 하기 전에, 구현한 기능이 의도한 대로 동작하는지 테스트해야 한다.
 
위의 test_requirements.txt에 정의한 테스트 라이브러리를 설치하고 아래와 같이 pytest를 실행한다.
 
패키지 내에 작성한 테스트 코드가 실행되면서 오류 발생 여부를 확인한다.
오류가 발생했다면 해당 부분의 로직을 수정한다.
예상 가능한 테스트 케이스는 최대한 많이 작성할 수록 좋다.
의도한 기능이 정상적으로 수행하는지, 의도한 예외가 정상적으로 발생하는지 확인할 수 있기 때문이다.
 
일반적으로 테스트를 먼저 정의하는 경우가 많은데, 지나친 코드 작성을 예방하기 위한 목적도 있다.
테스트 케이스에 대한 정의를 명확하게 하면, 해당 범위에 맞게 코드를 작성하면 된다.
즉, 불필요한 코드를 작성하지 않아도 된다.
 
요구 사항 분석을 통해 구현할 기능을 정의했으면, 테스트 케이스를 먼저 정리하자.
그러면 실제 코드 구현에서 작성할 코드의 양이 많이 줄어든다.
 
코드를 많이 작성하는 것이 아니라, 필요한 코드를 정확하게 구현하는 것이 더 중요하다.
 

패키지 테스트

whl 패키지 생성
whl 포맷의 패키지 생성이 잘 되는지 확인한다.
 
아래 코드를 실행한다.
setup.py를 실행하고  bdist_wheel 명령으로 whl 파일을 생성한다.
$ python setup.py bdist_wheel
 
아래와 같이 dist 폴더에 whl 파일이 생성된다.

 

whl 패키지를 생성하면서 dist와 함께 build, srtest_python.egg-info 폴더가 생성된다.
중간 산출물 파일을 저장하는 폴더로 형상 관리에서는 필요하지 않은 부분이다.
해당 폴더들은 뒤에서 다룰 .gitignore에 지정하여 형상 관리 대상에서 제외한다.
 
dist 폴더를 확인해보면 whl 파일이 정상적으로 생성 된 것을 확인할 수 있다.
 
 
생성 된 패키지 테스트
생성 된 whl 파일이 정상적으로 동작하는지 확인한다.
 
아래 명령으로 생성 된 whl 파일을 설치한다.
# pip install dist/패키지명-버전-py3-none-any.whl

$ pip install dist/srtest_python-1.0.0-py3-none-any.whl
 
아래와 같이 설치 된 것을 확인할 수 있다.

 

참고로 파이썬의 개발 환경이나 테스트 환경은 파이썬 또는 Anaconda의 가상 환경 활용을 권장한다.
아래 포스팅의 Anaconda 설치 항목을 참고한다.
패키지 실행 테스트 (init)
해당 예제 패키지에 구현한 기능은 init과 display이다.
먼저 init이 정상 동작하는지 확인한다.
 
다음 명령을 실행한다.
$ srtest-python init

 

예외 없이 정상 실행하는 것을 확인할 수 있다.
 
dst_file에 언급 된 경로로 이동하여 yml 파일이 있는지 확인한다.
정상적으로 생성 된 것을 확인할 수 있다.

 

 
패키지 실행 테스트 (display)
display 기능이 정상적으로 동작하는지 확인한다.
 
다음 명령을 실행한다.
$ srtest-python display

 

다음과 같이 실행한 날짜가 정상적으로 표시 되는 것을 확인할 수 있다.
 
패키지 생성과 설치, 실행이 정상적으로 수행되는 것을 확인했다.
 
설치한 패키지 제거
테스트를 위해 설치한 패키지를 제거한다.
 
다음 명령어를 실행한다.
$ pip uninstall srtest-python
 
다음과 같이 정상적으로 삭제 된 것을 확인할 수 있다.
 
파이썬 또는 Anaconda의 가상 환경을 사용한 경우, 해당 가상 환경 자체를 삭제하는 것도 방법이다.
Anaconda의 경우 다음과 같이 입력한다.
$ conda deactivate 가상환경이름
$ conda env remove --n 가상환경이름
 
 

형상 관리

모든 작업이 완료되면 형상 관리를 위해, 형상 관리 시스템에 코드를 커밋해야 한다.
커밋 된 코드를 사용하여 Jenkins에서 자동 빌드와 배포를 수행한다.
 

프로젝트 생성

만약 해당 패키지의 프로젝트 생성이 되어 있지 않으면 아래 포스팅을 참고하여 프로젝트와 브랜치를 생성한다.
그리고 아래 포스팅을 참고하여 로컬에 코드를 내려받고, 생성한 브랜치로 작업 공간을 변경한다.
브랜치 변경을 하지 않으면 main (master)에 코드가 커밋 되므로 주의해야 한다.
 

.gitignore 작성

형상 관리에 불필요한 파일은 커밋 대상에서 제외해야 한다.
git add 명령으로 필요한 파일만 지정할 수 있으나 매번 하기는 너무 번거롭다.
 
불필요한 파일은 계속 제외 되도록 설정할 수 있는 것이 .gitignore 파일이다.
아래 포스팅의 .gitignore 항목을 참고하여 .gitignore 파일을 생성한다.
 

README.md 작성

해당 패키지에 대한 사용법과 설명을 제공하는 README.md 파일을 생성한다.
 
아래 포스팅의 README.md 항목을 참고한다.

소스 커밋

모든 작업이 완료되면 아래 포스팅을 참고하여 소스코드를 커밋한다.
만약 생성한 브랜치를 main (master) 브랜치에 병합 (Merge)해야 하는 경우 아래 포스팅을 참고한다.