Azure Pipelines용 Python 사용자 지정

Azure Pipelines를 사용하여 자체 인프라를 설정하지 않고도 Python 앱을 빌드할 수 있습니다. pip와 같은 Python 앱을 빌드, 테스트 및 실행하는 데 일반적으로 사용하는 도구는 Azure Pipelines의 Microsoft 호스팅 에이전트 에 미리 설치됩니다.

Python을 사용하여 첫 번째 파이프라인을 만들려면 Python 빠른 시작을 참조하세요.

특정 Python 버전 사용

파이프라인에서 특정 버전의 Python을 사용하려면 Python 버전 사용 태스크azure-pipelines.yml에 추가합니다. 이 코드 조각은 Python 3.11을 사용하도록 파이프라인을 설정합니다.

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.11'

여러 Python 버전 사용

여러 Python 버전으로 파이프라인을 실행하려면(예: 해당 버전에 대해 패키지를 테스트하려면) Python 버전의 를 사용하여 을 matrix 정의 job 합니다. 그런 다음, 변수를 UsePythonVersion 참조 matrix 하도록 작업을 설정합니다.

jobs:
- job: 'Test'
  pool:
    vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-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

종속성 설치

스크립트를 사용하여 와 함께 pip특정 PyPI 패키지를 설치할 수 있습니다. 예를 들어 이 YAML은 및 패키지를 설치하거나 업그레이드 pipsetuptoolswheel 합니다.

- 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을 사용하여 보풀 테스트 실행

lint 테스트를 설치하거나 업그레이드 flake8 하고 사용하여 Lint 테스트를 실행하려면 다음 YAML을 사용합니다.

- 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 테스트 작업을 실행하여 작업을 분할할 수 있습니다. 개발 컴퓨터에서 테스트 환경을 연속으로 실행해야 합니다. 이 샘플에서는 를 사용하여 tox -e py 현재 작업에 대해 활성 상태인 Python 버전을 실행합니다.

- 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@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

코드 패키지 및 배달

twine사용하여 인증하려면 Twine Authenticate 작업을 사용하여 환경 변수에 인증 자격 증명을 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 앱용 이미지를 빌드 하고 컨테이너 레지스트리에 푸시할 수도 있습니다.