튜토리얼: CI/CD로 패키지 자동 빌드 및 게시
CI/CD를 사용하여 PyPI 패키지를 빌드하고 게시할 수 있습니다. 이 튜토리얼에서는 샘플 PyPI 패키지를 빌드, 테스트 및 게시하기 위한 새 CI/CD 구성을 만들 것입니다. CI/CD로 패키지를 자동으로 빌드하고 게시하려면:
CI/CD를 사용하여 PyPI 패키지를 빌드하고 게시할 수 있습니다. 자동 빌드는 패키지를 최신 상태로 유지하고 다른 사람들이 사용할 수 있도록 하는 데 도움이 됩니다.
이 튜토리얼에서는 샘플 PyPI 패키지를 빌드, 테스트 및 게시하기 위한 새 CI/CD 구성을 만들 것입니다. 완료되면 파이프라인의 각 단계가 어떻게 작동하는지 더 잘 이해하고 CI/CD를 자신의 패키지 레지스트리 워크플로우에 통합하는 데 편안함을 느낄 것입니다.
CI/CD로 패키지를 자동으로 빌드하고 게시하려면:
시작하기 전에#
이 튜토리얼을 완료하기 전에 다음이 있는지 확인하세요:
- 테스트 프로젝트. 원하는 Python 프로젝트를 사용할 수 있지만 이 튜토리얼을 위한 프로젝트를 별도로 만드는 것을 고려해 보세요.
- PyPI 및 GitLab 패키지 레지스트리에 대한 친숙함.
.gitlab-ci.yml 파일 만들기#
모든 CI/CD 구성에는 .gitlab-ci.yml이 필요합니다. 이 파일은 CI/CD 파이프라인의 각 단계를 정의합니다. 이 경우
단계는 다음과 같습니다:
build- PyPI 패키지를 빌드합니다.test- 테스트 프레임워크pytest로 패키지를 검증합니다.publish- 패키지 레지스트리에 패키지를 게시합니다.
.gitlab-ci.yml 파일을 만들려면:
-
상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 코드 > 저장소를 선택합니다.
-
파일 목록 위에서 커밋할 브랜치를 선택합니다.
-
오른쪽 상단에서 새로 만들기 (+)를 선택합니다.
-
파일 이름을
.gitlab-ci.yml로 지정합니다. 더 큰 창에 이 샘플 구성을 붙여넣습니다:default: image: python:3.9 cache: paths: - .pip-cache/ before_script: - python --version - pip install --upgrade pip - pip install build twine stages: - build - test - publish variables: PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip-cache" build: stage: build script: - python -m build artifacts: paths: - dist/ test: stage: test script: - pip install pytest - pip install dist/*.whl - pytest publish: stage: publish script: - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/* rules: - if: $CI_COMMIT_TAG -
변경 사항 커밋을 선택합니다.
커밋된 코드에 대한 간단한 설명:
image- 사용할 Docker 이미지를 지정합니다.stages- 이 파이프라인의 세 단계를 정의합니다.variables및cache- PIP가 캐싱을 사용하도록 구성합니다. 이는 후속 파이프라인을 약간 더 빠르게 실행할 수 있습니다.before_script- 세 단계를 완료하는 데 필요한 도구를 설치합니다.build- 패키지를 빌드하고 결과를 아티팩트로 저장합니다.test- pytest를 설치하고 실행하여 패키지를 검증합니다.publish- twine으로 패키지를 패키지 레지스트리에 업로드하되 새 태그가 푸시된 경우에만 합니다.CI_JOB_TOKEN을 사용하여 패키지 레지스트리로 인증합니다.
CI/CD 변수 없이 인증#
패키지 레지스트리로 인증하기 위해 예시 구성은 GitLab CI/CD에서 자동으로 제공되는 CI_JOB_TOKEN을 사용합니다.
외부 PyPI 레지스트리에 게시하려면 프로젝트 설정에서 시크릿 변수를 구성해야 합니다:
-
왼쪽 사이드바에서 설정 > CI/CD > 변수를 선택합니다.
-
값으로 PyPI API 토큰을 사용하여
PYPI_TOKEN이라는 새 변수를 추가합니다. -
.gitlab-ci.yml파일에서publish:script를 다음으로 교체합니다:script: - TWINE_PASSWORD=${PYPI_TOKEN} TWINE_USERNAME=__token__ python -m twine upload dist/*
파이프라인 확인#
변경 사항을 커밋하면 파이프라인이 올바르게 실행되는지 확인해야 합니다:
- 왼쪽 사이드바에서 빌드 > 파이프라인을 선택합니다. 가장 최근 파이프라인에는 이전에 정의된 세 단계가 있어야 합니다.
파이프라인이 실행되지 않은 경우 새 파이프라인을 수동으로 실행하고 성공적으로 완료되는지 확인합니다.
모범 사례#
패키지의 보안과 안정성을 보장하려면 패키지 레지스트리에 게시하기 위한 모범 사례를 따라야 합니다. 추가한 구성은 다음과 같습니다:
- 파이프라인 속도를 높이기 위해 캐싱을 구현합니다.
- 아티팩트를 사용하여 단계 간에 빌드된 패키지를 전달합니다.
- 게시 전에 패키지를 검증하기 위한 테스트 단계를 포함합니다.
- 인증 토큰과 같은 민감한 정보에 GitLab CI/CD 변수를 사용합니다.
- 새 Git 태그가 푸시될 때만 게시합니다. 이는 적절하게 버전이 지정된 릴리스만 게시되도록 합니다.
GitLab CI/CD로 패키지를 성공적으로 빌드, 테스트 및 게시했습니다. 유사한 구성을 사용하여 자신의 개발 프로세스를 간소화할 수 있습니다.
