Partage via


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.