Cloud Build può inviarti notifiche sugli aggiornamenti delle build ai canali selezionati. Questa pagina spiega come configurare le notifiche utilizzando il notificatore di GitHub Issues.
Prima di iniziare
Abilita le API Cloud Build, Compute Engine, Cloud Run, Pub/Sub e Secret Manager.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
- Installa la Google Cloud CLI.
Configurazione delle notifiche di GitHub Issues
La sezione seguente spiega come configurare manualmente le notifiche di GitHub Issues utilizzando il notificatore di GitHub Issues. Se preferisci automatizzare la configurazione invece, consulta Automatizzazione della configurazione per le notifiche.
Per configurare GitHub Issues:
Crea un token di accesso personale di GitHub:
- Vai alle impostazioni di GitHub per creare un nuovo token.
Seleziona l'ambito
repo.Fai clic su Genera token.
Archivia il token GitHub in Secret Manager:
Vai alla pagina Secret Manager nella Google Cloud console:
Fai clic su Crea secret.
Inserisci un nome per il secret.
In Valore secret, aggiungi il token GitHub.
Per salvare il secret, fai clic su Crea secret.
Anche se il account di servizio Cloud Run potrebbe avere il Editor ruolo per il tuo progetto, il Editor ruolo non è sufficiente per accedere al secret in Secret Manager. Per concedere al account di servizio Cloud Run l'accesso al secret:
Vai alla pagina IAM nella Google Cloud console:
Individua il service account predefinito di Compute Engine associato al tuo progetto:
Il service account predefinito di Compute Engine avrà un aspetto simile al seguente:
project-number-compute@developer.gserviceaccount.comPrendi nota del service account predefinito di Compute Engine.
Vai alla pagina Secret Manager nella Google Cloud console:
Fai clic sul nome del secret che contiene il secret per il token GitHub.
Nella scheda Autorizzazioni, fai clic su Aggiungi membro.
Aggiungi il service account predefinito di Compute Engine associato al tuo progetto come membro.
Seleziona l'autorizzazione Secret Manager Secret Accessor come ruolo.
Fai clic su Salva.
Concedi al account di servizio Cloud Run l'autorizzazione a leggere dai bucket Cloud Storage:
Vai alla pagina IAM nella Google Cloud console:
Individua il service account predefinito di Compute Engine associato al tuo progetto:
Il service account predefinito di Compute Engine avrà un aspetto simile al seguente:
project-number-compute@developer.gserviceaccount.comFai clic sull'icona a forma di matita nella riga contenente il service account predefinito di Compute Engine. Verrà visualizzata la scheda Accesso in modifica.
Fai clic su Aggiungi un altro ruolo.
Aggiungi il seguente ruolo:
- Storage Object Viewer
Fai clic su Salva.
Scrivi un file di configurazione del modello per descrivere il formato che devono assumere le GitHub Issues create:
Nel seguente file di configurazione del modello di esempio, i campi
titleebodyutilizzano le variabili di sostituzione della build:{ "title": "Build {{.Build.BuildTriggerId}}: {{.Build.Status}}", "body": "[{{.Build.ProjectId}}] {{.Build.BuildTriggerId}} status: **{{.Build.Status}}**\n\n[View Logs]({{.Build.LogUrl}})" }Per visualizzare l'esempio, consulta il file di configurazione del modello per il notificatore di GitHub Issues.
È possibile impostare altri campi dai parametri del corpo disponibili dell' endpoint dell'endpoint API per la creazione di un problema.
Scrivi un file di configurazione del notificatore per configurare il notificatore di GitHub Issues e filtrare gli eventi di build:
Nel seguente file di configurazione del notificatore di esempio, il campo
filterutilizza Common Expression Language con la variabile disponibile,build, per filtrare gli eventi di build con lo statoSUCCESS:apiVersion: cloud-build-notifiers/v1 kind: GitHubIssuesNotifier metadata: name: example-githubissues-notifier spec: notification: filter: build.status == Build.Status.FAILURE template: type: golang uri: gs://bucket_name/template-file-name delivery: githubToken: secretRef: github-token githubRepo: myuser/myrepo secrets: - name: github-token value: projects/project-id/secrets/secret-name/versions/latestDove:
githubTokenè la variabile di configurazione utilizzata in questo esempio per fare riferimento al token GitHub archiviato in Secret Manager. Il nome della variabile specificato qui deve corrispondere al camponameinsecrets.bucket-nameè il nome del bucket.template-file-nameè il nome del file modello.myuser/myrepoè il nome del repository per cui verranno creati i problemi.project-idè l'ID del tuo Google Cloud progetto.secret-nameè il nome del secret che contiene il token GitHub.
Per visualizzare l'esempio, consulta il file di configurazione del notificatore per il notificatore di GitHub Issues.
Per altri campi in base ai quali puoi filtrare, consulta la risorsa Build. Per altri esempi di filtri, consulta Utilizzo di CEL per filtrare gli eventi di build.
Carica il file di configurazione del notificatore e il file modello in un bucket Cloud Storage:
Se non hai un bucket Cloud Storage, esegui il comando seguente per crearne uno, dove bucket-name è il nome che vuoi assegnare al bucket, soggetto ai requisiti di denominazione.
gcloud storage buckets create gs://bucket-name/Carica il file di configurazione del notificatore e il file modello nel bucket:
gcloud storage cp config-file-name gs://bucket-name/config-file-name gcloud storage cp template-file-name gs://bucket-name/template-file-nameDove:
bucket-nameè il nome del bucket.config-file-nameè il nome del file di configurazione.template-file-nameè il nome del file modello.
Esegui il deployment del notificatore in Cloud Run:
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/githubissues:latest \ --no-allow-unauthenticated \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-idDove:
service-nameè il nome del servizio Cloud Run in cui stai eseguendo il deployment dell'immagine.config-pathè il percorso del file di configurazione del notificatore per il notificatore di GitHub Issues,gs://bucket-name/config-file-name.project-idè l'ID del tuo Google Cloud progetto.
Il comando
gcloud run deployesegue il pull dell'ultima versione dell'immagine ospitata da Artifact Registry di proprietà di Cloud Build. Cloud Build supporta le immagini del notificatore per nove mesi. Dopo nove mesi, Cloud Build elimina la versione dell'immagine. Se vuoi utilizzare una versione immagine precedente, dovrai specificare la versione semantica completa del tag dell'immagine nell'attributoimagedel comandogcloud run deploy. Le versioni e i tag delle immagini precedenti sono disponibili in Artifact Registry.Concedi le autorizzazioni Pub/Sub per creare token di autenticazione nel tuo Google Cloud progetto:
gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreatorDove:
project-idè l'ID del tuo Google Cloud progetto.project-numberè il numero del tuo Google Cloud progetto.
Crea un account di servizio per rappresentare l'identità della sottoscrizione Pub/Sub:
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"Puoi utilizzare
cloud-run-pubsub-invokero un nome univoco all'interno del tuo progetto Google Cloud .Concedi al account di servizio
cloud-run-pubsub-invokerl'autorizzazioneInvokerdi Cloud Run:gcloud run services add-iam-policy-binding service-name \ --member=serviceAccount:cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com \ --role=roles/run.invokerDove:
service-nameè il nome del servizio Cloud Run in cui stai eseguendo il deployment dell'immagine.project-idè l'ID del tuo Google Cloud progetto.
Crea l'argomento
cloud-buildsper ricevere i messaggi di aggiornamento della build per il notificatore:gcloud pubsub topics create cloud-buildsPuoi anche definire un nome dell'argomento personalizzato nel file di configurazione della build in modo che i messaggi vengano inviati all'argomento personalizzato. In questo caso, devi creare un argomento con lo stesso nome dell'argomento personalizzato:
gcloud pubsub topics create topic-namePer saperne di più, consulta Argomenti Pub/Sub per le notifiche di build.
Crea un sottoscrittore push Pub/Sub per il notificatore:
gcloud pubsub subscriptions create subscriber-id \ --topic=cloud-builds \ --push-endpoint=service-url \ --push-auth-service-account=cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.comDove:
subscriber-idè il nome che vuoi assegnare alla sottoscrizione.service-urlè l'URL generato da Cloud Run per il nuovo servizio.project-idè l'ID del tuo Google Cloud progetto.
Le notifiche per il tuo progetto Cloud Build sono ora configurate. La prossima volta che richiami una build, verrà creato un problema nel repository GitHub definito se la build corrisponde al filtro configurato.
Utilizzo di CEL per filtrare gli eventi di build
Cloud Build utilizza CEL con la variabile build nei campi
elencati nella risorsa Build
per accedere ai campi associati all'evento di build, come
l'ID trigger, l'elenco delle immagini o i valori di sostituzione. Puoi utilizzare la filter
stringa per filtrare gli eventi di build nel file di configurazione della build utilizzando
qualsiasi campo elencato nella risorsa Build. Per trovare la sintassi esatta associata al campo, consulta il
cloudbuild.proto
file.
Filtrare in base all'ID trigger
Per filtrare in base all'ID trigger, specifica il valore dell'ID trigger nel campo filter utilizzando build.build_trigger_id, dove trigger-id è l'ID trigger come stringa:
filter: build.build_trigger_id == trigger-id
Filtrare in base allo stato
Per filtrare in base allo stato, specifica lo stato della build in base al quale vuoi filtrare nel campo filter utilizzando build.status.
L'esempio seguente mostra come filtrare gli eventi di build con lo stato SUCCESS utilizzando il campo filter:
filter: build.status == Build.Status.SUCCESS
Puoi anche filtrare le build con stati diversi. L'esempio seguente mostra come filtrare gli eventi di build con lo stato SUCCESS, FAILURE o TIMEOUT utilizzando il campo filter:
filter: build.status in [Build.Status.SUCCESS, Build.Status.FAILURE, Build.Status.TIMEOUT]
Per visualizzare altri valori di stato in base ai quali puoi filtrare, consulta Stato nella documentazione di riferimento della risorsa Build.
Filtrare per tag
Per filtrare in base al tag, specifica il valore del tag nel campo filter utilizzando build.tags, dove tag-name è il nome del tag:
filter: tag-name in build.tags
Puoi filtrare in base al numero di tag specificati nell'evento di build utilizzando size. Nell'esempio seguente, il campo filter filtra gli eventi di build che hanno esattamente due tag specificati, uno dei quali è v1:
filter: size(build.tags) == 2 && "v1" in build.tags
Filtrare per immagini
Per filtrare in base alle immagini, specifica il valore dell'immagine nel campo filter utilizzando build.images, dove image-name è il nome completo dell'immagine come elencato in Artifact Registry, ad esempio us-east1-docker.pkg.dev/my-project/docker-repo/image-one:
filter: image-name in build.images
Nell'esempio seguente, il campo filter filtra gli eventi di build che hanno us-east1-docker.pkg.dev/my-project/docker-repo/image-one o us-east1-docker.pkg.dev/my-project/docker-repo/image-two specificati come nomi delle immagini:
filter: "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images || "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images
Filtrare per ora
Puoi filtrare gli eventi di build in base all'ora di creazione, all'ora di inizio o all'ora di fine di una build specificando una delle seguenti opzioni nel campo filter: build.create_time, build.start_time o build.finish_time.
Nell'esempio seguente, il campo filter utilizza timestamp per filtrare gli eventi di build con un'ora di richiesta per creare la build il 20 luglio 2020 alle 06:00:
filter: build.create_time == timestamp("2020-07-20:T06:00:00Z")
Puoi anche filtrare gli eventi di build in base ai confronti temporali. Nell'esempio seguente, il campo filter utilizza timestamp per filtrare gli eventi di build con un'ora di inizio compresa tra il 20 luglio 2020 alle 06:00 e il 30 luglio 2020 alle 06:00.
filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")
Per saperne di più su come vengono espressi i fusi orari in CEL, consulta la definizione del linguaggio per i fusi orari.
Per filtrare in base alla durata di una build, puoi utilizzare duration per confrontare i timestamp.
Nell'esempio seguente, il campo filter utilizza duration per filtrare gli eventi di build con build che vengono eseguite per almeno cinque minuti:
filter: build.finish_time - build.start_time >= duration("5m")
Filtrare per sostituzione
Puoi filtrare per sostituzione specificando la variabile di sostituzione nel campo filter utilizzando build.substitutions. Nell'esempio seguente,
il campo filter elenca le build che contengono la variabile di sostituzione
substitution-variable e controlla se substitution-variable corrisponde al substitution-value:
filter: build.substitutions[substitution-variable] == substitution-value
Dove:
substitution-variableè il nome della variabile di sostituzione.substitution-valueè il nome del valore di sostituzione.
Puoi anche filtrare in base ai valori delle variabili di sostituzione predefinite. Nell'esempio seguente, il campo filter elenca le build con il nome del ramo master e le build con il nome del repository github.com/user/my-example-repo. Le variabili di sostituzione predefinite BRANCH_NAME e REPO_NAME vengono passate come chiavi a build.substitutions:
filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"
Se vuoi filtrare le stringhe utilizzando le espressioni regolari, puoi utilizzare la funzione integrata matches. Nell'esempio seguente, il campo filter filtra le build con lo stato FAILURE o TIMEOUT e che hanno anche una variabile di sostituzione della build TAG_NAME con un valore che corrisponde all'espressione regolare v{DIGIT}.{DIGIT}.{3 DIGITS}).
filter: build.status in [Build.Status.FAILURE, Build.Status.TIMEOUT] && build.substitutions["TAG_NAME"].matches("^v\\d{1}\\.\\d{1}\\.\\d{3}$")
Per visualizzare un elenco dei valori di sostituzione predefiniti, consulta Utilizzo delle sostituzioni predefinite.
Passaggi successivi
- Scopri di più sui notificatori di Cloud Build.
- Scopri come sottoscrivere le notifiche di build.
- Scopri come scrivere un file di configurazione di compilazione di Cloud Build.