Auf dieser Seite wird erläutert, wie Sie mit Cloud Build Ihre Go-Anwendungen erstellen und testen, Ihre Artefakte in Artifact Registry hochladen, Herkunftsinformationen generieren und Ihre Testlogs in Cloud Storage speichern.
Hinweise
Die Anleitung auf dieser Seite setzt voraus, dass Sie mit Go vertraut sind. Außerdem gilt:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Zum Ausführen der
gcloud-Befehle auf dieser Seite müssen Sie die Google Cloud CLI installieren. - Halten Sie Ihr Go-Projekt bereit.
- Sie haben ein Go-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.
- Achten Sie darauf, dass Sie die ID des Laufzeitdienstkontos für Cloud Run kennen.
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"
Mit diesem Dienstkonto erstellen und testen Sie Ihre Go-Anwendung.
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 Seite settings Cloud Build Berechtigungen auf:
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 ‚Service Account User‘ zuweisen“ Ihr Laufzeit-Dienstkonto aus und klicken Sie dann auf Berechtigung erteilen. Mit dieser Konfiguration kann Ihr benutzerdefiniertes Cloud Build-Dienstkonto die Identität des Laufzeitdienstkontos annehmen, wenn es mit dem verwalteten Cloud Run-Dienst interagiert. Weitere Informationen finden Sie unter Identitätswechsel für Cloud Build-Dienstkonten für verwaltete Dienste konfigurieren.
- Storage-Administrator (
roles/storage.admin): Ermöglicht das Lesen und Schreiben in Cloud Storage. - Artifact Registry-Autor (
roles/artifactregistry.writer): Ermöglicht das Herunterladen von Images aus und das Schreiben in Artifact Registry. - Logs Writer (
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 aus 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 gezeigt, wie Sie eine Beispiel-Build-Konfigurationsdatei für eine Go-Anwendung aus dem Git-Repository cloud-build-samples erstellen. Die Build-Konfigurationsdatei enthält Schritte zum Erstellen der App, zum Hinzufügen von Einheitentests und zum Bereitstellen der App, nachdem die Tests bestanden wurden.
So erstellen Sie die Beispiel-Go-Anwendung:
Einheitentests konfigurieren: Wenn Sie in Ihrer Anwendung Einheitentests 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 Ihrer Konfigurationsdatei mit dem Feld
goModulesden Anwendungspfad und Ihr 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
go.mod-Datei im Arbeitsbereich des Builds. - appPath: der Pfad zu Ihrer verpackten Anwendung.
- version: Die Versionsnummer Ihrer Anwendung, formatiert in Zahlen und Punkten wie
v1.0.1.
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: VERIFIEDdem Abschnittoptionsin Ihrer Konfigurationsdatei hinzu, um die Generierung von Herkunftsnachweisen zu aktivieren.Nachdem der Build abgeschlossen ist, können Sie Repository-Details in Artifact Registry aufrufen.
Sie können auch Metadaten zur Build-Herkunft ansehen 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.