Auf dieser Seite wird erläutert, wie Sie mit Cloud Build Ihre Go-Anwendungen erstellen und testen, Ihre Artefakte in die Artifact Registry hochladen, Herkunftsinformationen generieren und Ihre Testprotokolle 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.
- Wenn Sie die
gcloud
-Befehle auf dieser Seite ausführen möchten, müssen Sie die Google Cloud CLI installieren. - Halten Sie Ihr Go-Projekt bereit.
- Sie haben ein Go-Repository in Artifact Registry. Falls Sie noch kein Repository haben, erstellen Sie ein neues.
- Wenn Sie Testlogs in Cloud Storage speichern möchten, erstellen Sie einen Bucket in Cloud Storage.
Dienstkonto konfigurieren
In den Beispielen in diesem Dokument wird ein vom Nutzer angegebenes Dienstkonto verwendet. Führen Sie in der Google Cloud CLI den folgenden Befehl aus, um das von Cloud Build verwendete Dienstkonto zu erstellen:
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_ID"
Das Compute-Standarddienstkonto, das von Cloud Run verwendet wird, benötigt die Berechtigung, als neues Dienstkonto zu fungieren. Ermitteln Sie zuerst den Namen des Compute-Dienstkontos in Ihrem Projekt:
gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"
Weisen Sie als Nächstes die Rolle Dienstkontonutzerroles/iam.serviceAccountUser
() zu:
gcloud iam service-accounts add-iam-policy-binding \
COMPUTE_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:cloud-build-go@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
Ersetzen Sie COMPUTE_SERVICE_ACCOUNT_EMAIL
durch die E-Mail-Adresse des Standard-Compute-Dienstkontos, die durch den vorherigen Befehl ausgegeben wurde.
IAM-Berechtigungen konfigurieren
Prüfen Sie, ob Sie die erforderlichen Berechtigungen haben:
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Build-Dienstkonto (roles/cloudbuild.builds.builder
) für Ihr Build-Dienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen von Builds in Cloud Build benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Artifact Registry Writer (roles/artifactregistry.writer
) für Ihr Build-Dienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Speichern erstellter Artefakte in Artifact Registry benötigen.
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Storage Object Creator (roles/storage.objectCreator
) für Ihr Build-Dienstkonto zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Speichern von Testlogs in Logging benötigen.
Um die Berechtigungen zu erhalten, die Sie für die Bereitstellung der Anwendung in Cloud Run benötigen, bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Cloud Run Developer (roles/run.developer
) für Ihr Build-Dienstkonto zu gewähren.
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 Beispieldatei für die Build-Konfiguration für eine Go-Anwendung aus dem Git-Repository cloud-build-samples erstellen. Die Build-Konfigurationsdatei enthält Schritte zum Erstellen der Anwendung, zum Hinzufügen von Unit-Tests und zum Bereitstellen der Anwendung nach Bestehen der Tests.
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 aufgolang
fest, um das Golang-Image von Docker Hub für Ihre Aufgabe zu verwenden.entrypoint
: Legen Sie den Wert dieses Felds auf/bin/bash
fest. So können Sie mehrzeilige Bash-Befehle direkt aus dem Build-Schritt ausführen.args
: Im Feldargs
eines Build-Schritts wird eine Liste von Argumenten abgerufen und an das Image übergeben, auf das im Feldname
verwiesen wird. Im folgenden Beispiel verwendet das Feldargs
die 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.log
in 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 im Feld
goModules
den Pfad Ihrer Anwendung 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 Ihres Repositorys in der Artifact Registry.
- projectId: die ID des Projekts Google Cloud , das Ihr Artifact Registry-Repository enthält.
- sourcePath: der Pfad zur
go.mod
-Datei im Arbeitsbereich des Builds. - appPath: der Pfad zur verpackten Anwendung.
- version: die Versionsnummer Ihrer Anwendung, formatiert in Ziffern und Punkten wie
v1.0.1
.
Optional: Generierung der Provenienz aktivieren
Cloud Build kann verifizierbare Herkunftsmetadaten für Lieferkettenebenen für Software-Artefakte (SLSA) generieren, um Ihre Continuous-Integration-Pipeline zu schützen.
Wenn Sie die Generierung der Provenienz aktivieren möchten, fügen Sie in der Konfigurationsdatei dem Abschnitt
options
den WertrequestedVerifyOption: VERIFIED
hinzu.Sobald der Build abgeschlossen ist, können Sie sich die Repository-Details in Artifact Registry ansehen.
Sie können auch Metadaten zur Build-Herkunft aufrufen und die Herkunft überprüfen.
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.xml
Das 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' repositoryProject_id: '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. Geben Sie im Feld Substitution variables (Ersatzvariablen) auch den Namen Ihres Artifact Registry-Repositories und den Namen Ihres Cloud Storage-Buckets für Testprotokolle an.