Personnaliser des pipelines Python
Cet article explique comment personnaliser la création, le test, l’empaquetage et la distribution d’applications et de code Python dans Azure Pipelines. Pour créer votre premier pipeline avec Python, consultez le Guide de démarrage rapide Python.
Avec les agents hébergés par Microsoft dans Azure Pipelines, vous pouvez créer vos applications Python sans avoir à configurer votre propre infrastructure. Les outils que vous utilisez couramment pour générer, tester et exécuter des applications Python, y compris pip
, sont préinstallés.
Vous devrez peut-être demander l’octroi gratuit de travaux parallèles ou acheter un travail parallèle pour exécuter vos pipelines.
Pour créer des applications Python avec Azure Pipelines, vous avez besoin d’un agent auto-hébergé avec Python installé. Pour installer Python sur votre agent, consultez UsePythonVersion.
Utilisation d’une version spécifique de Python
Pour utiliser une version spécifique de Python dans votre pipeline, ajoutez la tâche Utiliser la version de Python à azure-pipelines.yml. L’exemple de définition de pipeline YAML suivant définit le pipeline pour utiliser Python 3.11.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Utilisation de plusieurs versions de Python
Pour exécuter un pipeline avec plusieurs versions de Python, par exemple pour tester un package sur ces différentes versions, définissez un job
avec une matrix
de versions Python. Ensuite, définissez la tâche UsePythonVersion
pour référencer la variable matrix
. Par exemple :
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)'
Vous pouvez ajouter des tâches qui utilisent chaque version de Python dans la matrice.
Exécuter les scripts Python
Pour exécuter des scripts Python à partir de votre référentiel, utilisez un script
élément et spécifiez un nom de fichier. Par exemple :
- script: python src/example.py
Vous pouvez également utiliser la tâche de script Python pour exécuter des scripts Python inline.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Pour paramétrer l’exécution du script, utilisez la PythonScript
tâche avec arguments
des valeurs pour passer des arguments dans le processus en cours d’exécution. Vous pouvez utiliser sys.argv
ou la bibliothèque plus sophistiquée argparse
pour analyser les arguments.
- 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
Installer des dépendances
Vous pouvez utiliser des scripts pour installer des packages PyPI spécifiques avec pip
. L’exemple suivant installe ou met à niveau pip
et les setuptools
packages wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Configuration requise pour l’installation
Après la mise à jour pip
et les amis, une étape suivante classique consiste à installer des dépendances à partir de requirements.txt.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Exécuter les tests
Vous pouvez utiliser des scripts pour installer et exécuter différents tests dans votre pipeline.
Exécuter des tests lint avec flake8
Le code YAML suivant installe ou met à niveau flake8
et l’utilise pour exécuter des tests lint.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Tester avec pytest et collecter des mesures de couverture avec pytest-cov
Le code YAML suivant installe et pytest-cov
exécute des pytest
tests, en démettant les résultats des tests au format JUnit et en mettant les résultats de couverture du code au format 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'
Exécuter des tests avec Tox
Azure Pipelines peut exécuter des travaux de test Tox parallèles pour fractionner le travail. Sur un ordinateur de développement, vous devez exécuter vos environnements de test en série. L’exemple suivant utilise tox -e py
pour exécuter la version de Python active pour le travail actuel.
- 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'
Publier les résultats des tests
Ajoutez la tâche Publier les résultats des tests pour publier les résultats des tests JUnit ou xUnit sur le serveur.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Publier les résultats de la couverture du code
Ajoutez la tâche Publier les résultats de couverture du code pour publier les résultats de couverture du code sur le serveur. Vous pouvez voir les métriques de couverture dans le résumé de build et télécharger des rapports HTML pour une analyse plus approfondie.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Empaqueter et remettre du code
Pour vous authentifier avec twine
, utilisez la tâche d’authentification du jumeau Python pour stocker les informations d’identification d’authentification dans la variable d’environnement PYPIRC_PATH
.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Ajoutez ensuite un script personnalisé qui utilise twine
pour publier vos packages.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Vous pouvez également utiliser Azure Pipelines pour créer une image pour votre application Python et l’envoyer (push) à un registre de conteneurs.