Python 파이프라인 사용자 지정
이 문서에서는 Azure Pipelines에서 Python 앱 및 코드를 빌드, 테스트, 패키징 및 제공하는 방법을 사용자 지정하는 방법을 설명합니다. Python을 사용하여 첫 번째 파이프라인을 만들려면 Python 빠른 시작을 참조 하세요.
Azure Pipelines에서 Microsoft 호스팅 에이전트를 사용하면 자체 인프라를 설정하지 않고도 Python 앱을 빌드할 수 있습니다. Python 앱을 빌드, 테스트 및 실행하는 데 일반적으로 사용하는 도구(예 pip
: )가 미리 설치됩니다.
파이프라인을 실행하려면 병렬 작업의 무료 부여를 요청하거나 병렬 작업을 구매해야 할 수 있습니다.
Azure Pipelines를 사용하여 Python 앱을 빌드하려면 Python이 설치된 자체 호스팅 에이전트 가 필요합니다. 에이전트에 Python을 설치하려면 UsePythonVersion을 참조하세요.
특정 Python 버전 사용
파이프라인에서 특정 버전의 Python을 사용하려면 Python 버전 사용 태스크를 추가하여 azure-pipelines.yml. 다음 예제 YAML 파이프라인 정의는 Python 3.11을 사용하도록 파이프라인을 설정합니다.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
여러 Python 버전 사용
여러 Python 버전으로 파이프라인을 실행하려면(예: 해당 버전에 대해 패키지를 테스트하려면) Python 버전으로 job
matrix
정의합니다. 그런 다음, 변수를 UsePythonVersion
참조하도록 태스크를 matrix
설정합니다. 예시:
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
행렬에서 각 Python 버전을 사용하는 작업을 추가할 수 있습니다.
Python 스크립트 실행
리포지토리에서 Python 스크립트를 실행하려면 요소를 사용하고 script
파일 이름을 지정합니다. 예시:
- script: python src/example.py
Python 스크립트 태스크를 사용하여 인라인 Python 스크립트를 실행할 수도 있습니다.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
스크립트 실행을 매개 변수화하려면 값을 가진 arguments
태스크를 PythonScript
사용하여 실행 중인 프로세스에 인수를 전달합니다. 더 정교한 argparse
라이브러리를 사용하여 sys.argv
인수를 구문 분석할 수 있습니다.
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import sys
print ('Executing script file is:', str(sys.argv[0]))
print ('The arguments are:', str(sys.argv))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--world", help="Provide the name of the world to greet.")
args = parser.parse_args()
print ('Hello ', args.world)
arguments: --world Venus
종속성 설치
스크립트를 사용하여 특정 PyPI 패키지를 설치할 수 있습니다 pip
. 다음 예제에서는 설치 또는 업그레이드 및 pip
setuptools
wheel
패키지를 설치합니다.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
설치 요구 사항
업데이트 pip
하고 친구를 업데이트한 후 일반적인 다음 단계는 requirements.txt 종속성을 설치하는 것입니다.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
테스트 실행
스크립트를 사용하여 파이프라인에서 다양한 테스트를 설치하고 실행할 수 있습니다.
flake8을 사용하여 린트 테스트 실행
다음 YAML 코드는 설치 또는 업그레이드를 flake8
수행하고 이를 사용하여 lint 테스트를 실행합니다.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
pytest를 사용하여 테스트하고 pytest-cov를 사용하여 검사 메트릭 수집
다음 YAML 코드는 테스트를 설치 pytest
하고 pytest-cov
실행하며, 테스트 결과를 JUnit 형식으로 출력하고 코드 검사 결과를 Cobertura XML 형식으로 출력합니다.
- script: |
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
displayName: 'pytest'
Tox를 사용하여 테스트 실행
Azure Pipelines는 병렬 Tox 테스트 작업을 실행하여 작업을 분할할 수 있습니다. 개발 컴퓨터에서 테스트 환경을 연속으로 실행해야 합니다. 다음 예제에서는 현재 작업에 대해 활성 상태인 Python 버전을 실행하는 데 사용합니다 tox -e py
.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python $(python.version)'
inputs:
versionSpec: '$(python.version)'
- script: pip install tox
displayName: 'Install Tox'
- script: tox -e py
displayName: 'Run Tox'
테스트 결과 게시
테스트 결과 게시 태스크를 추가하여 JUnit 또는 xUnit 테스트 결과를 서버에 게시합니다.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
코드 검사 결과 게시
코드 검사 결과 게시 태스크를 추가하여 코드 검사 결과를 서버에 게시합니다. 빌드 요약에서 검사 메트릭을 확인하고 추가 분석을 위해 HTML 보고서를 다운로드할 수 있습니다.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
코드 패키지 및 배달
인증twine
하려면 Python 쌍 업로드 인증 작업을 사용하여 환경 변수에 인증 자격 증명을 PYPIRC_PATH
저장합니다.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
그런 다음 패키지를 게시하는 데 사용하는 twine
사용자 지정 스크립트를 추가합니다.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Azure Pipelines를 사용하여 Python 앱에 대한 이미지를 빌드하고 컨테이너 레지스트리에 푸시할 수도 있습니다.