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