Настройка Python для Azure Pipelines

Вы можете использовать Azure Pipelines для создания приложений Python без необходимости настраивать собственную инфраструктуру. Средства, которые обычно используются для сборки, тестирования и запуска приложений Python, например pip, предварительно устанавливаются на размещенных в Майкрософт агентах в Azure Pipelines.

Сведения о создании первого конвейера с помощью Python см. в кратком руководстве по Python.

Использование определенной версии Python

Чтобы использовать определенную версию Python в конвейере, добавьте задачу Использовать версию Python в azure-pipelines.yml. Этот фрагмент кода задает конвейер для использования Python 3.11:

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

Использование нескольких версий Python

Чтобы запустить конвейер с несколькими версиями Python, например для тестирования пакета с этими версиями, определите job с помощью matrix версии Python. Затем задайте 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')

Чтобы параметризировать выполнение скрипта PythonScript , используйте задачу со значениями arguments для передачи аргументов в выполняемый процесс. Для анализа аргументов можно использовать sys.argv или более сложную argparse библиотеку.

- 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помощью . Например, этот YAML устанавливает или обновляет pipsetuptools пакеты и .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

Чтобы установить или обновить 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)'

Публикация результатов покрытия кода

Добавьте задачу Publish Code Coverage Results (Публикация результатов покрытия кода), чтобы опубликовать результаты покрытия кода на сервере. Метрики охвата можно просмотреть в сводке по сборке и скачать отчеты HTML для дальнейшего анализа.

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

Упаковка и доставка кода

Для проверки подлинности с twineпомощью используйте задачу Twine Authentication для хранения учетных данных проверки подлинности в переменной 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 и отправки его в реестр контейнеров.