Questa pagina spiega come utilizzare Cloud Build per creare e testare le applicazioni Go, caricare gli artefatti in Artifact Registry, generare informazioni sulla provenienza e salvare i log di test in Cloud Storage.
Prima di iniziare
Le istruzioni riportate in questa pagina presuppongono che tu abbia familiarità con Go. Inoltre:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- Per eseguire i comandi
gcloud
in questa pagina, installa Google Cloud CLI. - Tieni a portata di mano il progetto Go.
- Avere un repository Go in Artifact Registry. Se non ne hai uno, crea un nuovo repository.
- Se vuoi archiviare i log di test in Cloud Storage, crea un bucket in Cloud Storage.
Configura il account di servizio
Gli esempi in questo documento utilizzano un account di servizio specificato dall'utente. Per creare il account di servizio utilizzato da Cloud Build, esegui questo comando in Google Cloud CLI:
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_ID"
L'account di servizio Compute predefinito (utilizzato da Cloud Run) deve disporre dell'autorizzazione per agire come il nuovo service account. Innanzitutto, determina il nome delaccount di serviziot di Compute nel tuo progetto:
gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"
Successivamente, concedi il ruolo
Utente service account (roles/iam.serviceAccountUser
):
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"
Sostituisci COMPUTE_SERVICE_ACCOUNT_EMAIL
con l'indirizzo email del account di servizio Compute predefinito stampato dal comando precedente.
Configura le autorizzazioni IAM
Assicurati di disporre delle autorizzazioni necessarie:
Per ottenere le autorizzazioni
necessarie per eseguire build in Cloud Build,
chiedi all'amministratore di concederti il ruolo IAM
Service Account Cloud Build (roles/cloudbuild.builds.builder
)
sul tuo account di servizio di build.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Per ottenere le autorizzazioni
necessarie per archiviare gli artefatti compilati in Artifact Registry,
chiedi all'amministratore di concederti il
ruolo IAM Artifact Registry Writer (roles/artifactregistry.writer
)
sul tuo account di servizio di build.
Per ottenere le autorizzazioni
necessarie per archiviare i log di test in Logging,
chiedi all'amministratore di concederti il
ruolo IAM Storage Object Creator (roles/storage.objectCreator
)
account di servizioe account di build.
Per ottenere le autorizzazioni necessarie per eseguire il deployment dell'applicazione su Cloud Run, chiedi all'amministratore di concederti il ruolo IAM Cloud Run Developer (roles/run.developer
) sul tuo account di servizio di build.
Configurare le build Go
L'immagine
golang
pubblica di Docker Hub
supporta la creazione utilizzando i moduli Go.
L'utilizzo di questa immagine come passaggio di build nel file di configurazione di Cloud Build consente
di richiamare i comandi go
all'interno dell'immagine. Gli argomenti passati a questo passaggio di build
vengono passati direttamente allo strumento golang
, consentendoti di eseguire qualsiasi comando go
in questa immagine.
Questa sezione mostra come creare un file di configurazione della build di esempio per un'app Go dal repository Git cloud-build-samples. Il file di configurazione della build contiene i passaggi per creare l'app, aggiungere test delle unità e, dopo il superamento dei test, per eseguire il deployment dell'app.
Per creare l'applicazione Go di esempio:
Configura i test unitari: se hai definito test unitari nella tua applicazione, puoi configurare Cloud Build per eseguire i test aggiungendo i seguenti campi in un passaggio di build:
name
: imposta il valore di questo campo sugolang
per utilizzare l'immagine golang da Docker Hub per l'attività.entrypoint
: imposta il valore di questo campo su/bin/bash
. In questo modo puoi eseguire comandi bash su più righe direttamente dal passaggio di build.args
: il campoargs
di un passaggio di build accetta un elenco di argomenti e li passa all'immagine a cui fa riferimento il camponame
. Nel seguente esempio, il campoargs
accetta gli argomenti per:- Esecuzione del formatter dei log di test per scaricare l'output dei log di test.
- Stampa dell'output del log.
- Salvataggio dei risultati del test in
sponge.log
. Output dei risultati in
sponge.log
in un file XML JUNIT. Il nome del file XML JUNIT viene creato utilizzando la versione breve dell'ID commit associato alla build. Un passaggio di build successivo salverà i log in questo file in Cloud Storage.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
Carica su Artifact Registry: nel file di configurazione, utilizza il campo
goModules
per specificare il percorso dell'applicazione e il repository Go in Artifact Registry:# Upload Go module to artifact registry artifacts: goModules: - repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'
Sostituisci i seguenti valori:
- repositoryName: il nome del repository Go in Artifact Registry.
- location: la posizione del repository in Artifact Registry.
- projectId: l'ID del progetto Google Cloud che contiene il repository Artifact Registry.
- sourcePath: il percorso del file
go.mod
nello spazio di lavoro della build. - appPath: il percorso dell'applicazione pacchettizzata.
- version: il numero di versione della tua applicazione, formattato in numeri e punti come
v1.0.1
.
(Facoltativo) Attivare la generazione della provenienza
Cloud Build può generare metadati di provenienza della build Supply chain Levels for Software Artifacts (SLSA) verificabili per proteggere la pipeline di integrazione continua.
Per attivare la generazione della provenienza, aggiungi
requestedVerifyOption: VERIFIED
alla sezioneoptions
del file di configurazione.Una volta completata la build, puoi visualizzare i dettagli del repository in Artifact Registry.
Puoi anche visualizzare i metadati di provenienza della build e convalidare la provenienza.
Salva i log di test in Cloud Storage: puoi configurare Cloud Build per archiviare tutti i log di test in Cloud Storage specificando un percorso e una posizione del bucket esistenti per i log di test.
Il seguente passaggio di build archivia i log dei test salvati nel file XML JUNIT in un bucket Cloud Storage:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xml
Il seguente snippet mostra il file di configurazione della build completo per i passaggi precedenti:
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'
Avvia la build utilizzando gcloud CLI o crea un trigger di build:
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
Trigger di build
Segui i passaggi descritti in Creare un trigger di build. Nel campo Variabili di sostituzione, devi fornire anche il nome del repository Artifact Registry e il nome del bucket Cloud Storage per i log di test.
Passaggi successivi
- Scopri come eseguire deployment blu/verde su Compute Engine.
- Scopri come risolvere gli errori di build.