Créer et tester des applications Python

Cette page explique comment configurer Cloud Build pour compiler et tester vos applications Python, importer vos artefacts dans Artifact Registry, générer des informations de provenance et enregistrer vos journaux de test dans Cloud Storage.

Cloud Build permet d'exécuter vos tâches à l'aide de n'importe quelle image de conteneur disponible publiquement. L'image python publique de Docker Hub est fournie avec les outils python et pip préinstallés. Vous pouvez configurer Cloud Build pour installer des dépendances, compiler, et exécuter des tests unitaires à l'aide de ces outils.

Avant de commencer

Les instructions de cette page partent du principe que vous connaissez bien Python. Autres caractéristiques :

  • Activer les API Cloud Build, Artifact Registry, and Cloud Storage.

    Activer les API

  • Pour exécuter les commandes gcloud sur cette page, installez Google Cloud CLI.
  • Ayez votre projet Python à portée de main.
  • Vous devez disposer d'un dépôt Python dans Artifact Registry. Si vous n'en avez pas, créez un dépôt.
  • Si vous souhaitez stocker les journaux de test dans Cloud Storage, créez un bucket dans Cloud Storage.

Autorisations IAM requises

Pour obtenir des instructions sur l'attribution de rôles, consultez la page Attribuer un rôle à l'aide de la page IAM.

Configurer des compilations Python

Cette section décrit un exemple de fichier de configuration de compilation pour une application Python. Il comporte des étapes de compilation pour installer les exigences, ajouter des tests unitaires et une fois les tests réussis, créer et déployer l'application.

  1. Dans le répertoire racine de votre projet, créez un fichier de configuration Cloud Build nommé cloudbuild.yaml.

  2. Conditions d'installation: l'image python de Docker Hub est fournie préinstallée avec pip. Pour installer des dépendances à partir de pip, ajoutez une étape de compilation avec les champs suivants:

    • name: définissez la valeur de ce champ sur python ou python:<tag> afin d'utiliser l'image Python de Docker Hub pour cette tâche. Pour afficher la liste des tags disponibles pour d'autres images Python, consultez la documentation de référence de Docker Hub pour l'image Python.
    • entrypoint: la définition de ce champ remplace le point d'entrée par défaut de l'image référencée dans name. Définissez la valeur de ce champ sur pip pour appeler pip en tant que point d'entrée de l'étape de compilation et exécuter les commandes pip.
    • args : Le champ args d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ name fait référence. Transmettez les arguments pour exécuter la commande pip install dans ce champ. L'option --user de la commande pip install garantit que les étapes de compilation suivantes peuvent accéder aux modules installés dans cette étape de compilation.

    L'étape de compilation suivante ajoute des arguments pour répondre aux exigences d'installation:

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. Ajouter des tests unitaires: si vous avez défini des tests unitaires dans votre application à l'aide d'un framework de test tel que pytest, vous pouvez configurer Cloud Build pour qu'il exécute les tests en ajoutant les champs suivants dans une étape de compilation:

    • name: définissez la valeur de ce champ sur python pour utiliser l'image Python de Docker Hub pour votre tâche.
    • entrypoint: définissez la valeur de ce champ sur python pour exécuter les commandes python.
    • args: ajoutez les arguments pour exécuter la commande python pytest.

    L'étape de compilation suivante enregistre la sortie du journal pytest dans un fichier XML JUnit. Le nom de ce fichier est construit à l'aide de $SHORT_SHA, la version courte de l'ID de commit associé à votre build. Une étape de compilation ultérieure enregistrera les journaux de ce fichier dans Cloud Storage.

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. Compilation: dans votre fichier de configuration de compilation, définissez le compilateur et le args pour compiler votre application:

    • name: définissez la valeur de ce champ sur python pour utiliser l'image Python de Docker Hub pour votre tâche.
    • entrypoint: définissez la valeur de ce champ sur python pour exécuter les commandes python.
    • args: ajoutez les arguments pour exécuter votre compilation.

    L'étape de compilation suivante démarre la compilation:

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. Importer dans Artifact Registry :

    Cloud Build génère des informations sur la provenance de compilation du niveau de la chaîne d'approvisionnement pour les artefacts logiciels (SLSA) pour les packages Python autonomes lorsque vous importez des artefacts dans Artifact Registry à l'aide des champs python_packages disponibles dans le fichier de configuration Cloud Build.

    Dans votre fichier de configuration, ajoutez le champ pythonPackages et spécifiez votre dépôt Python dans Artifact Registry:

        artifacts:
           pythonPackages:
           - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY'
              paths: ['dist/*']
    

    Remplacez les valeurs suivantes :

    • PROJECT-ID est l'ID du projet Google Cloud qui contient votre dépôt Artifact Registry.
    • REPOSITORY est l'ID du dépôt.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
  6. Facultatif: Activer la provenance pour les builds régionaux

    Si vous utilisez une compilation régionale, ajoutez le champ requestedVerifyOption dans le options de votre fichier de configuration de compilation. Définissez la valeur sur VERIFIED pour permettre la génération des métadonnées de provenance. Si vous n'ajoutez pas requestedVerifyOption: VERIFIED, Cloud Build ne génère la provenance que pour les builds mondiaux.

    options:
      requestedVerifyOption: VERIFIED
    
  7. Enregistrer les journaux de test dans Cloud Storage: vous pouvez configurer Cloud Build pour stocker tous les journaux de test dans Cloud Storage en spécifiant un emplacement de bucket et un chemin d'accès existants vers les journaux de test. L'étape de compilation suivante stocke les journaux de test que vous avez enregistrés dans le fichier XML JUnit dans un bucket Cloud Storage:

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. Démarrer la compilation: manuellement ou à l'aide de déclencheurs de compilation.

    Une fois la compilation terminée, vous pouvez afficher les détails du dépôt dans Artifact Registry.

    Vous pouvez également afficher les métadonnées de provenance de la compilation et valider la provenance pour protéger votre chaîne d'approvisionnement logicielle.

Étapes suivantes