Поделиться через


Настройка конвейеров Python

В этой статье описывается настройка сборки, тестирования, упаковки и доставки приложений Python и кода в Azure Pipelines. Чтобы создать первый конвейер с помощью Python, ознакомьтесь с кратким руководством по Python.

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

Возможно, потребуется запросить бесплатное предоставление параллельных заданий или приобрести параллельное задание для запуска конвейеров.

Чтобы создать приложения Python с помощью Azure Pipelines, вам потребуется локальный агент с установленным Python. Сведения об установке Python на агенте см. в разделе UsePythonVersion.

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

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

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

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

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

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

Выполнение тестов

Скрипты можно использовать для установки и выполнения различных тестов в конвейере.

Выполнение тестов lint с помощью flake8

Следующий код YAML устанавливает или обновляет flake8 и использует его для выполнения тестов lint.

- script: |
    python -m pip install flake8
    flake8 .
  displayName: 'Run lint tests'

Тестирование с помощью pytest и сбор метрик покрытия с помощью pytest-cov

Следующий код YAML устанавливает и pytest-cov выполняет тестыpytest, вывод результатов теста в формате 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@2
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

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

Для проверки подлинности с twineпомощью задачи проверки подлинности в переменной PYPIRC_PATH среды используйте задачу проверки подлинности Python twine для хранения учетных данных проверки подлинности.

- 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 и отправки его в реестр контейнеров.