Auf dieser Seite wird beschrieben, wie Sie Cloud Build so konfigurieren, dass es Ihre Python-Anwendungen erstellt und testet, Ihre Artefakte in Artifact Registry hochlädt, Informationen zur Herkunft generiert und Ihre Testlogs in Cloud Storage speichert.
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 Cloud Build API, die Artifact Registry API und die Cloud Storage API.
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 „Administrator der Dienstnutzung“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen. - Installieren Sie die Google Cloud CLI, um die
gcloudBefehle auf dieser Seite auszuführen. - Halten Sie Ihr Python-Projekt bereit.
- Halten Sie ein Python-Repository in Artifact Registry bereit. Wenn Sie 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
Weisen Sie zum Speichern von Testlogs in Logging Ihrem Build-Dienstkonto die Rolle „Storage-Objekt-Ersteller“ (
roles/storage.objectCreator) für den Cloud Storage-Bucket zu.Weisen Sie zum Speichern erstellter Images in Artifact Registry Ihrem Build-Dienstkonto die Rolle Artifact Registry-Autor (
roles/artifactregistry.writer) zu.
Eine Anleitung zum Zuweisen dieser Rollen finden Sie unter Rolle über die IAM-Seite zuweisen.
Python-Builds konfigurieren
Dieser Abschnitt enthält eine Beispiel-Build-Konfigurationsdatei für eine Python-Anwendung. Sie enthält Build-Schritte zum Verwalten von Installationsanforderungen, zum Hinzufügen von Einheitentests und zum Erstellen und Bereitstellen der Anwendung, nachdem die Tests bestanden wurden.
Erstellen Sie im Stammverzeichnis des Projekts die Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml.Anforderungen für die Installation: Beim Image
pythonvon Docker Hub istpipvorinstalliert. Fügen Sie einen Build-Schritt mit den folgenden Feldern hinzu, um Abhängigkeiten auspipzu installieren:name: Legen Sie den Wert dieses Felds aufpythonoderpython:<tag>fest, um für diese Aufgabe das Python-Image von Docker Hub 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 innameverwiesen wird. Legen Sie den Wert dieses Felds aufpipfest, umpipals Einstiegspunkt für den Build-Schritt aufzurufen undpip-Befehle auszuführen.args: Im Feldargseines Build-Schritts wird eine Liste von Argumenten abgerufen und an das Image übergeben, auf das im Feldnameverwiesen wird. Übergeben Sie die Argumente, um den Befehlpip installin diesem Feld auszuführen. Das Flag--userim Befehlpip installsorgt dafür, dass die nachfolgenden Build-Schritte auf die in diesem Build-Schritt installierten Module zugreifen können.
Mit dem 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']Einheitentests hinzufügen: Wenn Sie in Ihrer Anwendung Einheitentests mit einem Test-Framework wie
pytestdefiniert 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 aufpythonfest, um das Python-Image von Docker Hub für Ihre Aufgabe zu verwenden.entrypoint: Legen Sie den Wert dieses Felds aufpythonfest, umpython-Befehle auszuführen.args: Fügen Sie die Argumente zum Ausführen des Befehlspython pytesthinzu.
Mit dem folgenden Build-Schritt wird die
pytest-Logausgabe von in einer JUnit-XML-Datei gespeichert. Der Name dieser Datei wird mithilfe von$SHORT_SHAerstellt, der kurzen Version der Commit-ID, die Ihrem Build zugeordnet ist. 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']Erstellen: Definieren Sie in der Build-Konfigurationsdatei den Builder und die
args, um Ihre Anwendung zu erstellen:name: Legen Sie den Wert dieses Felds aufpythonfest, um das Python-Image von Docker Hub für Ihre Aufgabe zu verwenden.entrypoint: Legen Sie den Wert dieses Felds aufpythonfest, umpython-Befehle auszuführen.args: Fügen Sie die Argumente zum Ausführen des Builds hinzu.
Mit dem folgenden Build-Schritt wird der Build gestartet:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']In Artifact Registry hochladen:
Fügen Sie in der Konfigurationsdatei das Feld
pythonPackageshinzu 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 Standort für das Repository.
Optional: Herkunftserstellung aktivieren
Cloud Build kann überprüfbare Metadaten zur Herkunft von Software-Artefakten (Supply chain Levels for Software Artifacts, SLSA) generieren, um Ihre Continuous Integration-Pipeline zu schützen.
Fügen Sie
requestedVerifyOption: VERIFIEDzum Abschnittoptionsin der Konfigurationsdatei hinzu, um die Herkunftserstellung zu aktivieren.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'Starten Sie den Build: manuell oder mithilfe von Build-Triggern.
Nach Abschluss des Builds können Sie die Repository-Details in Artifact Registry aufrufen.
Sie können auch Metadaten zur Build-Herkunft aufrufen und die Herkunft validieren.
Nächste Schritte
- Erfahren Sie, wie Sie Build-Ergebnisse anzeigen.
- Builds schützen
- Python-Anwendungen erstellen und containerisieren
- Private Abhängigkeiten verwenden
- Blau/Grün-Bereitstellungen in der Compute Engine ausführen
- Build-Fehler beheben