Python-Anwendungen erstellen und testen

Auf dieser Seite wird beschrieben, wie Sie Cloud Build konfigurieren, um Ihre Python-Anwendungen zu erstellen und zu testen, Ihre Artefakte in Artifact Registry hochzuladen, Herkunftsinformationen zu generieren und Ihre Testlogs in Cloud Storage zu speichern.

Mit Cloud Build können Sie jedes öffentlich verfügbare Container-Image zur Ausführung Ihrer Aufgaben verwenden. Im öffentlichen python-Image aus Docker Hub sind die Tools python und pip vorinstalliert. Sie können Cloud Build zum Installieren von Abhängigkeiten sowie zum Erstellen und Ausführen von Einheitentests mit diesen Tools konfigurieren.

Hinweis

Die Anleitung auf dieser Seite setzt voraus, dass Sie mit Python vertraut sind. Außerdem gilt:

  • Aktivieren Sie die APIs für Cloud Build, Artifact Registry und Cloud Storage, falls sie noch nicht aktiviert sind.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    APIs aktivieren

  • Zum Ausführen der gcloud-Befehle auf dieser Seite müssen Sie die Google Cloud CLI installieren.
  • Halten Sie Ihr Python-Projekt bereit.
  • Sie haben ein Python-Repository in Artifact Registry. Wenn Sie noch keines haben, erstellen Sie ein neues Repository.
  • Wenn Sie Testlogs in Cloud Storage speichern möchten, erstellen Sie einen Bucket in Cloud Storage.

Erforderliche IAM-Berechtigungen

Eine Anleitung zum Zuweisen dieser Rollen finden Sie unter Rolle über die IAM-Seite zuweisen.

Python-Builds konfigurieren

In diesem Abschnitt wird eine Beispiel-Build-Konfigurationsdatei für eine Python-App beschrieben. Sie enthält Build-Schritte zum Verwalten von Installationsanforderungen, zum Hinzufügen von Unittests und zum Erstellen und Bereitstellen der App, nachdem die Tests bestanden wurden.

  1. Erstellen Sie im Stammverzeichnis des Projekts eine Build-Konfigurationsdatei mit dem Namen cloudbuild.yaml.

  2. Anforderungen für die Installation: Beim Image python von Docker Hub ist pip vorinstalliert. Fügen Sie einen Build-Schritt mit den folgenden Feldern hinzu, um Abhängigkeiten aus pip zu installieren:

    • name: Legen Sie den Wert dieses Felds auf python oder python:<tag> fest, um das Python-Image aus Docker Hub für diese Aufgabe zu verwenden. Eine Liste der verfügbaren Tags für andere Python-Images finden Sie in der Docker Hub-Referenz für das Python-Image.
    • entrypoint: Wenn Sie dieses Feld festlegen, wird der Standardeinstiegspunkt des Image überschrieben, auf das in name verwiesen wird. Legen Sie den Wert dieses Felds auf pip fest, um pip als Einstiegspunkt für den Build-Schritt aufzurufen und pip-Befehle auszuführen.
    • args: Im Feld args eines Build-Schritts wird eine Liste von Argumenten abgerufen und an das Image übergeben, auf das im Feld name verwiesen wird. Übergeben Sie die Argumente, um den Befehl pip install in diesem Feld auszuführen. Das Flag --user im Befehl pip install sorgt dafür, dass die nachfolgenden Build-Schritte auf die in diesem Build-Schritt installierten Module zugreifen können.

    Im folgenden Build-Schritt werden Argumente zum Installieren von Anforderungen hinzugefügt:

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. Einheitentests hinzufügen: Wenn Sie in Ihrer Anwendung Einheitentests mit einem Test-Framework wie pytest definiert haben, können Sie Cloud Build so konfigurieren, dass die Tests ausgeführt werden: Fügen Sie folgende Felder in einem Build-Schritt hinzu:

    • name: Legen Sie den Wert dieses Felds auf python fest, um das Python-Image von Docker Hub für Ihre Aufgabe zu verwenden.
    • entrypoint: Legen Sie den Wert dieses Felds auf python fest, um python-Befehle auszuführen.
    • args: Fügen Sie die Argumente zum Ausführen des Befehls python pytest hinzu.

    Mit dem folgenden Build-Schritt wird die Logausgabe von pytest in einer JUnit-XML-Datei gespeichert. Der Name dieser Datei wird aus $SHORT_SHA, der Kurzversion der mit Ihrem Build verknüpften Commit-ID, gebildet. Bei einem nachfolgenden Build-Schritt werden die Logs in dieser Datei in Cloud Storage gespeichert.

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. Build: Definieren Sie in Ihrer Build-Konfigurationsdatei den Builder und die args zum Erstellen Ihrer Anwendung:

    • name: Legen Sie den Wert dieses Felds auf python fest, um das Python-Image von Docker Hub für Ihre Aufgabe zu verwenden.
    • entrypoint: Legen Sie den Wert dieses Felds auf python fest, um python-Befehle auszuführen.
    • args: Fügen Sie die Argumente für die Ausführung Ihres Builds hinzu.

    Mit dem folgenden Build-Schritt wird der Build gestartet:

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

    Fügen Sie in Ihrer Konfigurationsdatei das Feld pythonPackages hinzu und geben Sie Ihr Python-Repository in Artifact Registry an:

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

    Ersetzen Sie die folgenden Werte:

    • PROJECT-ID ist die ID des Google Cloud -Projekts, das Ihr Artifact Registry-Repository enthält.
    • REPOSITORY ist die ID des Repositorys.
    • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.
  6. Optional: Provenienzgenerierung aktivieren

    Cloud Build kann überprüfbare Supply-chain Levels for Software Artifacts (SLSA)-Build-Herkunftsmetadaten generieren, um Ihre Continuous Integration-Pipeline zu schützen.

    Fügen Sie requestedVerifyOption: VERIFIED dem Abschnitt options in Ihrer Konfigurationsdatei hinzu, um die Generierung von Herkunftsnachweisen zu aktivieren.

  7. Testlogs in Cloud Storage speichern: Sie können Cloud Build so konfigurieren, dass alle Testlogs in Cloud Storage gespeichert werden. Geben Sie dazu einen vorhandenen Bucket-Speicherort und einen Pfad zu den Testlogs an. Mit dem folgenden Build-Schritt werden die Testlogs, die Sie in der JUNIT-XML-Datei gespeichert haben, in einem Cloud Storage-Bucket gespeichert:

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. Build starten: Manuell oder mit Build-Triggern.

    Nach Abschluss des Builds können Sie sich die Repository-Details in Artifact Registry ansehen.

    Sie können auch Metadaten zur Build-Herkunft aufrufen und die Herkunft validieren.

Nächste Schritte