Auf dieser Seite wird erläutert, wie Sie mit Cloud Build Ihre Go-Anwendungen erstellen und testen, Ihre Artefakte in Artifact Registry hochladen, Informationen zur Herkunft generieren und 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.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Informationen zum Zuweisen von Rollen. - Installieren Sie die Google Cloud CLI, um die
gcloudBefehle auf dieser Seite auszuführen. - Halten Sie Ihr Go-Projekt bereit.
- Sie benötigen ein Go-Repository in Artifact Registry. Wenn Sie noch keines haben, dann erstellen Sie ein neues Repository.
- Wenn Sie Testlogs in Cloud Storage speichern möchten, erstellen Sie einen Bucket in Cloud Storage.
- Sie benötigen die ID des Laufzeitdienstkontos für Cloud Run.
Benutzerdefiniertes Cloud Build-Dienstkonto erstellen
Erstellen Sie ein benutzerdefiniertes Cloud Build-Dienstkonto, indem Sie den folgenden Befehl in der Google Cloud CLI ausführen:
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_NAME"
Sie verwenden dieses Dienstkonto, um Ihre Go-Anwendung zu erstellen und zu testen.
IAM-Berechtigungen konfigurieren
So konfigurieren Sie Ihr neues Dienstkonto mit den Berechtigungen, die zum Erstellen und Bereitstellen von Go-Anwendungen erforderlich sind:
-
Rufen Sie in der Google Cloud -Console die settings Cloud Build Berechtigungen Seite auf:
Berechtigungen aufrufen
Rufen Sie das Menü Dienstkonto auf und wählen Sie Ihr
cloud-build-go-Dienstkonto aus.Setzen Sie den Status der folgenden Rollen auf Aktiviert:
- Cloud Run-Administrator (
roles/run.admin): Ermöglicht Cloud Build, neue Dienste in Cloud Run bereitzustellen.- Wählen Sie im Bereich „Rolle des Dienstkontonutzers zuweisen“ Ihr Laufzeitdienstkonto aus und klicken Sie dann auf Berechtigung erteilen. Mit dieser Konfiguration kann Ihr benutzerdefiniertes Cloud Build-Dienstkonto das Laufzeitdienstkonto bei der Interaktion mit dem verwalteten Cloud Run-Dienst imitieren. Weitere Informationen finden Sie unter Identitätsübernahme des Cloud Build-Dienstkontos für verwaltete Dienste konfigurieren.
- Storage-Administrator (
roles/storage.admin): Ermöglicht das Lesen und Schreiben in Cloud Storage. - Artifact Registry-Writer (
roles/artifactregistry.writer): Ermöglicht das Abrufen von Images aus und das Schreiben in Artifact Registry. - Logs-Autor (
roles/logging.logWriter): Ermöglicht das Schreiben von Logeinträgen in Cloud Logging. - Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor): Ermöglicht Ihrem Dienstkonto, Builds auszuführen.
- Cloud Run-Administrator (
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 im Image go-Befehle 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 beschrieben, wie Sie eine Beispiel-Build-Konfigurationsdatei für eine Go-Anwendung aus dem cloud-build-samples Git-Repository erstellen. Die Build-Konfigurationsdatei enthält Schritte zum Erstellen der Anwendung, zum Hinzufügen von Unittests und zum Bereitstellen der Anwendung, nachdem die Tests bestanden wurden.
So erstellen Sie die Beispiel-Go-Anwendung:
Unittests konfigurieren: 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. Auf diese Weise können Sie mehrzeilige Bash-Befehle direkt aus dem 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.steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
In Artifact Registry hochladen: Geben Sie in der Konfigurationsdatei mit dem Feld
goModulesden Anwendungspfad und das Go-Repository in Artifact Registry an:# Upload Go module to artifact registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'Ersetzen Sie die folgenden Werte:
- repositoryName: der Name Ihres Go-Repositorys in Artifact Registry.
- location: der Speicherort für Ihr Repository in Artifact Registry.
- projectId: die ID des Google Cloud Projekts, das Ihr Artifact Registry-Repository enthält.
- sourcePath: der Pfad zur Datei
go.modim Arbeitsbereich des Builds. - appPath: der Pfad zu Ihrer gepackten Anwendung.
- version: die Versionsnummer für Ihre Anwendung, formatiert in Zahlen und Punkten wie
v1.0.1.
Optional: Herkunftserstellung aktivieren
Cloud Build kann überprüfbare Metadaten zur Build-Herkunft gemäß Supply Chain Levels for Software Artifacts (SLSA) generieren, um Ihre Continuous Integration-Pipeline zu schützen.
Fügen Sie
requestedVerifyOption: VERIFIEDdemoptionsAbschnitt in der Konfigurationsdatei hinzu, um die Herkunftserstellung zu aktivieren.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.
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:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xmlDas folgende Snippet zeigt die vollständige Build-Konfigurationsdatei für die vorherigen Schritte:
steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml # Store golang modules in Google Artifact Registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'Starten Sie den Build mit der gcloud CLI oder erstellen Sie einen Build-Trigger:
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
Build-Trigger
Folgen Sie der Anleitung unter Build-Trigger erstellen. Im Feld Substitutionsvariablen müssen Sie auch den Namen Ihres Artifact Registry-Repositorys und den Namen Ihres Cloud Storage-Bucket für Testlogs angeben.
Nächste Schritte
- Informationen zu Blau/Grün-Bereitstellungen in Compute Engine
- Build-Fehler beheben