Cloud Build può inviarti notifiche sugli aggiornamenti della build tramite inviare notifiche ai canali desiderati, ad esempio Slack o il tuo server SMTP. In questa pagina viene spiegato come configurare le notifiche utilizzando l'utilità di notifica SMTP.
Prima di iniziare
-
Abilita le API Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager.
- Installa Google Cloud CLI.
Configurazione delle notifiche via email
Per inviare notifiche via email, devi disporre di un server SMTP in esecuzione e dell'accesso a
un account sul server, includendo nome utente e password dell'account
verranno utilizzate per inviare notifiche. Puoi usare qualsiasi server SMTP esistente,
avrà bisogno di accedere al nome e alla porta del server. Ad esempio, il nome del server
Gmail è smtp.gmail.com
e la porta è 587
. Assicurati che il tuo server SMTP
le quote di recapito del server possano gestire il volume di email che prevedi di generare.
La sezione seguente spiega come configurare manualmente le notifiche email utilizzando il notifier su SMTP. Se vuoi automatizzare il processo consulta l'articolo Automatizzare la configurazione delle notifiche.
Per configurare le notifiche via email:
Archiviare la password dell'account email del mittente in Secret Manager. Tieni presente che, per Gmail, devi utilizzare la password per l'app anziché la password di accesso all'account.
Apri la pagina Secret Manager nella console Google Cloud:
Fai clic su Crea secret.
Inserisci un nome per il secret.
In Valore secret, aggiungi la password dell'account email del mittente.
Per salvare il secret, fai clic su Crea secret.
Anche se il tuo account di servizio Cloud Run può avere Editor per il progetto, il ruolo Editor non lo è per accedere al tuo secret in Secret Manager. Dovrai concedere l'accesso al tuo account di servizio Cloud Run al tuo secret:
Vai alla pagina IAM nella console Google Cloud:
Individua l'account di servizio predefinito di Compute Engine associato al tuo progetto:
Il tuo account di servizio predefinito di Compute Engine sarà simile al seguente:
project-number-compute@developer.gserviceaccount.com
Prendi nota del tuo account di servizio predefinito di Compute Engine.
Apri la pagina Secret Manager nella console Google Cloud:
Fai clic sul nome del secret che contiene il secret del mittente password dell'account email.
Nella scheda Autorizzazioni, fai clic su Aggiungi membro.
Aggiungi l'account di servizio predefinito di Compute Engine associato al tuo progetto come membro.
Seleziona l'autorizzazione Funzione di accesso ai secret di Secret Manager come ruolo.
Fai clic su Salva.
Concedi al tuo account di servizio Cloud Run l'autorizzazione per leggere da Bucket Cloud Storage:
Vai alla pagina IAM nella console Google Cloud:
Individua l'account di servizio predefinito di Compute Engine associato a con il tuo progetto:
Il tuo account di servizio predefinito di Compute Engine sarà simile al seguente:
project-number-compute@developer.gserviceaccount.com
Fai clic sull'icona a forma di matita nella riga contenente il tuo account di servizio predefinito di Compute Engine. Verrà visualizzata la scheda Accesso in modifica.
Fai clic su Aggiungi un altro ruolo.
Aggiungi il seguente ruolo:
- Visualizzatore oggetti Storage
Fai clic su Salva.
Scrivi un file di configurazione delle notifiche per configurare il server di notifica SMTP e filtrare in base a creare eventi:
Nel seguente file di configurazione dell'autore della notifica, il campo
filter
utilizza Common Expression Language con la variabile disponibilebuild
per filtrare gli eventi di build con lo statoSUCCESS
:apiVersion: cloud-build-notifiers/v1 kind: SMTPNotifier metadata: name: example-smtp-notifier spec: notification: filter: build.status == Build.Status.SUCCESS params: buildStatus: $(build.status) delivery: server: server-host-name port: "port" sender: sender-email from: from-email recipients: - recipient-email # optional: more emails here password: secretRef: smtp-password template: type: golang uri: gs://example-gcs-bucket/smtp.html secrets: - name: smtp-password value: projects/project-id/secrets/secret-name/versions/latest
Dove:
buildStatus
è un parametro definito dall'utente. Questo parametro assume il valore di $(build.status), lo stato della build.server-host-name
è l'indirizzo del tuo server SMTP.port
è la porta che gestirà le richieste SMTP. Questo deve essere specificato come stringa.sender-email
è l'indirizzo email dell'account del mittente visualizzato dal valore server-host-name specificato.from-email
è l'indirizzo email visualizzato da destinatari.recipient-email
è un elenco di uno o più indirizzi email da ricevere i messaggi inviati dal mittente.smtp-password
è la variabile di configurazione utilizzata in questo esempio per fare riferimento alla password dell'account email del mittente tramite Secret Manager. Il nome della variabile qui specificato deve corrisponde al camponame
insecrets
.project-id
è l'ID del tuo progetto Google Cloud.secret-name
è il nome del tuo secret che contiene la password per l'account email del mittente.Il campo
uri
fa riferimento al filesmtp.html
. Questo file fa riferimento a un modello HTML ospitato su Cloud Storage e rappresenta l'email di notifica.
Per visualizzare l'esempio, consulta il file di configurazione delle notifiche per SMTP notificatore.
Per ulteriori campi in base ai quali puoi filtrare, consulta la risorsa Build. Per ulteriori esempi di filtro, consulta Utilizzare CEL per filtrare gli eventi di build.
Carica il file di configurazione del generatore di notifiche in un bucket Cloud Storage:
Se non hai un bucket Cloud Storage, esegui questo comando creare un bucket, dove
bucket-name
è il nome che vuoi assegnare bucket, soggetti ai requisiti di denominazione.gcloud storage buckets create gs://bucket-name/
Carica il file di configurazione dell'autore della notifica nel tuo bucket:
gcloud storage cp config-file-name gs://bucket-name/config-file-name
Dove:
bucket-name
è il nome del tuo bucket.config-file-name
è il nome del file di configurazione.
Esegui il deployment del generatore di notifiche in Cloud Run:
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/smtp:latest \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
Dove:
service-name
è il nome del servizio Cloud Run a cui stai eseguendo il deployment dell'immagine.config-path
è il percorso del file di configurazione dell'avviso per il tuo SMTP notificatore,gs://bucket-name/config-file-name
.project-id
è l'ID del tuo progetto Google Cloud.
Il comando
gcloud run deploy
estrae la versione più recente dell'oggetto da Artifact Registry di proprietà di Cloud Build. Cloud Build supporta le immagini di notifica per nove mesi. Dopo nove mesi, Cloud Build elimina dell'immagine. Se vuoi utilizzare una versione dell'immagine precedente, è necessario specificare la versione semantica completa del tag immagine l'attributoimage
del comandogcloud run deploy
. Le versioni immagine e i tag precedenti sono disponibili in Artifact Registry.Concedi le autorizzazioni Pub/Sub per creare token di autenticazione nel tuo progetto:
gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Dove:
project-id
è l'ID del tuo progetto Google Cloud.project-number
è il numero del tuo progetto Google Cloud.
Crea un account di servizio per rappresentare l'identità dell'abbonamento Pub/Sub:
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Puoi utilizzare
cloud-run-pubsub-invoker
o un nome univoco all'interno del tuo progetto Google Cloud.Concedi all'account di servizio
cloud-run-pubsub-invoker
l'autorizzazioneInvoker
di 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.invoker
Dove:
service-name
è il nome del servizio Cloud Run a cui stai eseguendo il deployment dell'immagine.project-id
è l'ID del tuo progetto Google Cloud.
Crea l'argomento
cloud-builds
per ricevere i messaggi di aggiornamento della build per l'autore della notifica:gcloud pubsub topics create cloud-builds
Crea un sottoscrittore push di Pub/Sub per l'autore della notifica:
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.com
Dove:
subscriber-id
è il nome che vuoi assegnare all'abbonamento.service-url
è l'URL generato da Cloud Run per il nuovo servizio.project-id
è l'ID del tuo progetto Google Cloud.
Le notifiche per il tuo progetto Cloud Build sono ora configurate. Il prossimo
volta che richiami una build, recipients
riceverà un'email con un
se la build corrisponde al filtro configurato.
Utilizzo di CEL per filtrare gli eventi di build
Cloud Build utilizza la tecnologia CEL con la variabile build
nei campi
elencato nella sezione Build
per accedere ai campi associati all'evento di build, ad esempio
l'ID trigger, l'elenco di immagini o i valori di sostituzione. Puoi usare filter
stringa per filtrare gli eventi di build nel file di configurazione di compilazione utilizzando
in tutti i campi elencati nella sezione Build
risorsa. Per trovare la sintassi esatta associata al tuo campo, consulta le
cloudbuild.proto
.
Filtro per ID trigger
Per filtrare in base all'ID trigger, specifica il valore dell'ID trigger nel campo filter
campo utilizzando build.build_trigger_id
, dove trigger-id
è
l'ID trigger come stringa:
filter: build.build_trigger_id == trigger-id
Filtro per stato
Per filtrare in base allo stato, specifica lo stato della build in base al quale applicare il filtro
nel campo filter
utilizzando build.status
.
L'esempio seguente mostra come filtrare gli eventi di build con un 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 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 la sezione Stato nella sezione Build come riferimento delle risorse.
Filtro per tag
Per filtrare in base al tag, specifica il valore del tag nel campo filter
campo utilizzando build.tags
, dove tag-name
è
il nome del tuo tag:
filter: tag-name in build.tags
Puoi filtrare in base al numero di tag specificato nell'evento di build
utilizzando size
. Nell'esempio seguente, i filtri di campo filter
crea eventi che abbiano esattamente due tag specificati con un tag specificato come
v1
:
filter: size(build.tags) == 2 && "v1" in build.tags
Filtro 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,
us-east1-docker.pkg.dev/my-project/docker-repo/image-one
:
filter: image-name in build.images
Nell'esempio seguente, filter
applica un filtro agli eventi di build con
us-east1-docker.pkg.dev/my-project/docker-repo/image-one
o
us-east1-docker.pkg.dev/my-project/docker-repo/image-two
specificato 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
Filtro per ora
Puoi filtrare gli eventi di build in base a ora di creazione, ora di inizio
termina l'ora specificando una delle seguenti opzioni in filter
campo: build.create_time
, build.start_time
o build.finish_time
.
Nell'esempio seguente, il campo filter
utilizza timestamp
per filtrare
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
tra le 06:00 del 20 luglio 2020 e le 06:00 del 30 luglio 2020.
filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")
Per scoprire di più su come i fusi orari vengono espressi in CEL, consulta la definizione dei 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
con build che vengono eseguite per almeno cinque minuti:
filter: build.finish_time - build.start_time >= duration("5m")
Filtro 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 verifica se substitution-variable corrisponde al valore substitution-value specificato:
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 predefiniti delle variabili di sostituzione. Nel seguente
Ad esempio, il campo filter
elenca le build con il nome ramo master
e le build che hanno il nome del repository github.com/user/my-example-repo
. La
vengono passate le variabili di sostituzione predefinite BRANCH_NAME
e REPO_NAME
come chiavi per build.substitutions
:
filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"
Se vuoi filtrare in base alle stringhe utilizzando espressioni regolari, puoi utilizzare la
funzione matches
integrata. Nell'esempio riportato di seguito, i filtri di campo filter
per le build con stato ERRORE o TIMEOUT e che hanno anche una build
variabile di sostituzione 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 un elenco dei valori di sostituzione predefiniti, consulta la sezione Utilizzo di sostituzioni predefinite.
Passaggi successivi
- Scopri di più sugli avvisi di Cloud Build.
- Scopri come iscriverti per ricevere notifiche sulle build.
- Scopri come scrivere un file di configurazione di compilazione di Cloud Build.