Auf dieser Seite wird erläutert, wie Sie mit Cloud Build Go-Anwendungen erstellen, testen, in Containern verpacken und bereitstellen und wie Sie Ihre Testlogs in Cloud Storage speichern.
Hinweis
Die Anleitung auf dieser Seite setzt voraus, dass Sie mit Go vertraut sind. Außerdem gilt:
-
Aktivieren Sie die Cloud Build API, die Cloud Run API und die Artifact Registry API, 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 - Zum Ausführen der
gcloud-Befehle auf dieser Seite müssen Sie die Google Cloud CLI installieren. - Halten Sie Ihr Go-Projekt bereit.
- Wenn Sie Ihre Go-Anwendung mit Cloud Build containerisieren möchten, benötigen Sie ein
Dockerfilezusammen mit Ihrem Quellcode. - Wenn Sie den erstellten Container in Artifact Registry speichern möchten, erstellen Sie ein Docker-Repository in Artifact Registry.
- Wenn Sie Testlogs in Cloud Storage speichern möchten, erstellen Sie einen Bucket in Cloud Storage.
Erforderliche IAM-Berechtigungen
Wenn Sie Testlogs in Logging speichern möchten, weisen Sie Ihrem Build-Dienstkonto die Rolle Storage Object Creator (
roles/storage.objectCreator) für den Cloud Storage-Bucket zu.Wenn Sie erstellte Images in Artifact Registry speichern möchten, weisen Sie Ihrem Build-Dienstkonto die Rolle „Artifact Registry Writer“ (
roles/artifactregistry.writer) zu.
Eine Anleitung zum Zuweisen dieser Rollen finden Sie unter Rolle über die IAM-Seite zuweisen.
Go-Builds konfigurieren
Das öffentliche golang-Image von Docker Hub unterstützt das Erstellen mithilfe von Go-Modulen.
Wenn Sie dieses Image als Build-Schritt in Ihrer Cloud Build-Konfigurationsdatei verwenden, können Sie go-Befehle im Image aufrufen. Argumente, die an diesen Build-Schritt übergeben werden, werden direkt an das golang-Tool weitergegeben, sodass Sie in diesem Image alle go-Befehle ausführen können.
In diesem Abschnitt wird eine Beispiel-Build-Konfigurationsdatei für eine Go-App beschrieben. Sie enthält Build-Schritte zum Erstellen der App, zum Hinzufügen von Unittests und zum Containerisieren und Bereitstellen der App, nachdem die Tests bestanden wurden.
So erstellen Sie eine Go-Anwendung:
Erstellen Sie im Stammverzeichnis Ihres Projekts eine Cloud Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml.Erstellen und testen: Wenn Sie Unittests in Ihrer Anwendung definiert haben, können Sie Cloud Build so konfigurieren, dass die Tests ausgeführt werden. Fügen Sie dazu die folgenden Felder in einem Build-Schritt hinzu:
name: Legen Sie den Wert dieses Felds aufgolangfest, um das Golang-Image von Docker Hub für Ihre Aufgabe zu verwenden.entrypoint: Legen Sie den Wert dieses Felds auf/bin/bashfest. So können Sie mehrzeilige Bash-Befehle direkt über den Build-Schritt ausführen.args: Im Feldargseines Build-Schritts wird eine Liste von Argumenten abgerufen und an das Image übergeben, auf das im Feldnameverwiesen wird. Im folgenden Beispiel verwendet das Feldargsdie Argumente für:- Ausführen des Testlog-Formatierers zum Herunterladen der Testlogausgabe.
- Ausgeben der Logausgabe.
- Speichern der Testergebnisse in
sponge.log. - Ausgabe der Ergebnisse in
sponge.login eine JUnit-XML-Datei Der Name der JUnit-XML-Datei wird mit der kurzen Version der Commit-ID erstellt, die Ihrem Build zugeordnet ist. Bei einem nachfolgenden Build-Schritt werden die Logs in dieser Datei in Cloud Storage gespeichert.
Containerisieren der Anwendung: Nachdem Sie den Build-Schritt hinzugefügt haben, um sicherzustellen, dass die Tests bestanden haben, können Sie die Anwendung erstellen. Cloud Build bietet ein vordefiniertes Docker-Image, mit dem Sie Ihre Go-Anwendung containerisieren können. Fügen Sie in einem Build-Schritt die folgenden Felder hinzu, um Ihre Anwendung zu containerisieren:
name: Legen Sie den Wert dieses Felds aufgcr.io/cloud-builders/dockerfest, um das vordefinierte Docker-Image für Ihre Aufgabe zu verwenden.args: Fügen Sie die Argumente für den Befehldocker buildals Werte für dieses Feld hinzu.
Mit dem folgenden Build-Schritt wird das Image
myimageerstellt und mit der kurzen Version Ihrer Commit-ID getaggt. Der Build-Schritt verwendet Substitutionen für Projekt-ID, Repository-Name und kurze SHA-Werte. Daher werden diese Werte bei der Build-Erstellung automatisch ersetzt. Beachten Sie, dass Sie zum Speichern des Images ein Docker-Repository in Artifact Registry erstellen oder ein vorhandenes erstellen müssen.Container in Artifact Registry übertragen: Sie können den erstellten Container in Artifact Registry speichern. Artifact Registry ist ein Google Cloud Dienst, mit dem Sie Build-Artefakte speichern, verwalten und sichern können. Dazu benötigen Sie ein vorhandenes Docker-Repository in Artifact Registry. Um Cloud Build so zu konfigurieren, dass das Image in einem Artifact Registry-Docker-Repository gespeichert wird, fügen Sie einen Build-Schritt mit den folgenden Feldern hinzu:
name: Legen Sie den Wert dieses Felds aufgcr.io/cloud-builders/dockerfest, um das offizielledocker-Builder-Image für Ihre Aufgabe zu verwenden.args: Fügen Sie die Argumente für den Befehldocker pushals Werte dieses Felds hinzu. Geben Sie für die Ziel-URL das Artifact Registry-Docker-Repository ein, in dem Sie das Image speichern möchten.
Mit dem folgenden Build-Schritt wird das Image, das Sie im vorherigen Schritt erstellt haben, per Push an Artifact Registry übertragen:
Container in Cloud Run bereitstellen: Um das Image in Cloud Run bereitzustellen, fügen Sie einen Build-Schritt mit den folgenden Feldern hinzu:
name: Setzen Sie den Wert dieses Felds aufgoogle/cloud-sdk, um das gcloud CLI-Image zum Aufrufen desgcloud-Befehls zu verwenden, um das Image in Cloud Run bereitzustellen.args: Fügen Sie die Argumente für den Befehlgcloud run deployals Werte dieses Felds hinzu.
Mit dem folgenden Build-Schritt wird das zuvor erstellte Image in Cloud Run bereitgestellt:
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:
Das folgende Snippet zeigt die vollständige Build-Konfigurationsdatei für die vorherigen Schritte:
Starten Sie den Build mit der gcloud CLI oder Build-Triggern. Sie müssen den Namen des Artifact Registry-Repositorys angeben, wenn Sie den Build starten.
So geben Sie das Artifact Registry-Repository an, wenn Sie den Build mit der gcloud CLI starten:
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \ --substitutions=_AR_REPO_NAME="AR_REPO_NAME"Ersetzen Sie dabei
AR_REPO_NAMEdurch den Namen Ihres Artifact Registry-Repositorys.Wenn Sie das Artifact Registry-Repository beim Erstellen mit Build-Triggern angeben möchten, geben Sie den Namen Ihres Artifact Registry-Repositorys beim Erstellen des Build-Triggers im Feld Substitutionsvariablen an.
Nächste Schritte
- Blau/Grün-Bereitstellungen in Compute Engine durchführen
- Container-Images erstellen
- Build-Fehler beheben