다음을 통해 공유


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 앱에 대한 이미지를 빌드하고 컨테이너 레지스트리에 푸시할 수도 있습니다.