Personnaliser Python pour Azure Pipelines

Vous pouvez utiliser Azure Pipelines pour 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, comme pip, sont préinstallés sur les agents hébergés par Microsoft dans Azure Pipelines.

Pour créer votre premier pipeline avec Python, consultez le Guide de démarrage rapide Python.

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. Cet extrait de code définit le pipeline pour qu’il utilise 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.

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)'

Vous pouvez ajouter des tâches à exécuter à l’aide de chaque version de Python dans la matrice.

Exécuter des scripts Python

Pour exécuter des scripts Python dans votre dépôt, utilisez un élément script et spécifiez un nom de fichier. Par exemple :

- script: python src/example.py

vous pouvez également exécuter des scripts Python inclus avec la tâche Script Python :

- 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 tâche PythonScript 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. Par exemple, ce YAML installe ou met à niveau pip et les packages setuptools et wheel.

- script: python -m pip install --upgrade pip setuptools wheel
  displayName: 'Install tools'

Configuration requise pour l’installation

Une fois que vous avez mis à jour pip et amis, en général l’étape qui suit consiste à installer les dépendances à partir de requirements.txt.

- script: pip install -r requirements.txt
  displayName: 'Install requirements'

Exécuter les tests

Utilisez des scripts pour installer et exécuter différents tests dans votre pipeline.

Exécuter des tests lint avec flake8

Pour installer ou mettre à niveau flake8 et l’utiliser pour exécuter des tests lint, utilisez ce YAML :

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

Tester avec pytest et collecter des mesures de couverture avec pytest-cov

Utilisez ce YAML pour installer pytest et pytest-cov, exécuter des tests, générer des résultats de test au format JUnit et les résultats de couverture du code de sortie au format XML Cobertura :

- 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. Cet exemple 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 la couverture du code pour publier les résultats de la couverture du code sur le serveur. Vous pouvez consulter les métriques de couverture dans le résumé de la build et télécharger des rapports HTML pour une analyse plus approfondie.

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

Empaqueter et remettre du code

Pour vous authentifier auprès de twine, utilisez la tâche Twine Authenticate 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>'

Ensuite, ajoutez 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.