Cloud Build può inviarti notifiche sugli aggiornamenti dello stato della build inviandoti notifiche ai canali che preferisci. Oltre ai notificatori gestiti da Cloud Build, come Slack o SMTP, puoi anche utilizzare la libreria fornita nel repository cloud-build-notifiers per creare il tuo notificatore.
Questa pagina spiega come creare un notifier personalizzato.
Prima di iniziare
-
Enable the Cloud Build, Cloud Run, Pub/Sub, and Secret Manager APIs.
Installa il linguaggio di programmazione Go.
Installa Google Cloud CLI.
Configurazione
Apri una finestra del terminale sulla tua macchina.
Clona e vai al repository cloud-build-notifiers:
git clone https://github.com/GoogleCloudPlatform/cloud-build-notifiers.git && cd cloud-build-notifiers
Aggiungi una directory per il tuo notifier e accedivi, dove DIRECTORY_NAME è il nome della directory:
mkdir DIRECTORY_NAME && cd DIRECTORY_NAME
Inizializza i moduli Go nella nuova directory, dove DIRECTORY_NAME è il nome della nuova directory:
go mod init github.com/GoogleCloudPlatform/cloud-build-notifiers/DIRECTORY_NAME
Ora dovresti vedere un file
go.mod
nella tua directory.Aggiungi la seguente riga al file
go.mod
per assicurarti di utilizzare la versione più recente dei notificatori:replace github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers => ../
Le dipendenze sono state configurate e puoi creare il tuo notifier.
Creazione di un notifier personalizzato
cloud-build-notifiers
contiene una directory lib/notifiers
. Nella directorylib/notifiers
vedrai un file denominato notifier.go
. Questo
file contiene il framework che puoi utilizzare per creare il tuo notifier.
Dovrai definire due metodi per creare un notifier nel file principale.
Nella nuova directory, crea un file denominato
main.go
.In
main.go
, importa il framework della libreria di notifiche e le eventuali altre dipendenze:Definisci un metodo principale per il tuo notifier. In questo esempio,
logger
è il nome dell'avviso:Il metodo
main
utilizza il metodoMain
definito nel filenotifier.go
, che viene utilizzato per configurare i file binari del notifier.Definisci una struct per il notifier, in cui definirai le variabili per l'interfaccia. In questo esempio,
logger
è il nome dell'avviso. Ad es.
A questo punto, aggiungi la funzionalità di avviso. L'interfaccia del notifier è definita da due metodi:
SetUp
: il metodoSetUp
accetta una configurazione, recupera i secret, estrae i filtri specificati dalla configurazione e li memorizza come predicato del linguaggio Common Expression che può essere utilizzato per inviare notifiche. Per approfondire il linguaggio CEL, consulta il repositorycel-spec
.SendNotification
: il metodoSendNotification
viene utilizzato per inviare notifiche al canale o al servizio che preferisci.La definizione dell'oggetto notifier è disponibile in
notifier.go
e nella documentazione di Go.Nell'esempio seguente, l'interfaccia del notificatore è definita utilizzando il metodo
SetUp
eSendNotification
per stampare i log di compilazione, conlogger
come nome del notificatore:Il file
main.go
finale dovrebbe essere simile al seguente. In questo esempio,logger
viene utilizzato come nome del notificatore.Ora che hai definito il notificatore, puoi seguire la procedura riportata di seguito per configurarlo.
Configurazione delle notifiche
Scrivi un file di configurazione del notificatore per configurare il notificatore e filtrare in base agli eventi di compilazione:
Nel seguente esempio di file di configurazione del notifier, il campo
filter
utilizza CEL con la variabile disponibilebuild
per filtrare gli eventi di build con uno statoSUCCESS
:Dove:
logging-sample
è il nome dell'utente che invia la notifica.
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 notifier in un bucket Cloud Storage:
Se non hai un bucket Cloud Storage, esegui il seguente comando per crearne uno, dove BUCKET_NAME è il nome che vuoi assegnare al bucket, rispettando i requisiti di denominazione.
gcloud storage buckets create gs://BUCKET_NAME/
Carica il file di configurazione del notifier nel bucket:
gcloud storage cp CONFIG_FILE_NAME gs://BUCKET_NAME/CONFIG_FILE_NAME
Dove:
BUCKET_NAME
è il nome del bucket.CONFIG_FILE_NAME
è il nome del file di configurazione.
Crea ed esegui il deployment del notifier:
Crea un Dockerfile per
logging-sample
:Crea e distribuisci il notificatore utilizzando il seguente file
cloudbuild.yaml
.Dove:
_CONFIG_PATH
è il percorso della configurazione del notificatore, ad esempiogs://BUCKET_NAME/CONFIG_FILE_NAME.yaml
.
Per eseguire
cloudbuild.yaml
, passa il percorso del programma di notifica come variabile di sostituzione.gcloud builds submit . --substitutions=_CONFIG_PATH=gs://BUCKET_NAME/CONFIG_FILE_NAME
Concedi le autorizzazioni Pub/Sub per creare token di autenticazione nel 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à della tua sottoscrizione 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 in 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 compilazione per il tuo notifier:gcloud pubsub topics create cloud-builds
Crea un abbonato push Pub/Sub per il tuo notifier:
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 state configurate. La volta successiva che esegui una compilazione, riceverai una notifica sul tuo canale se la compilazione corrisponde al filtro che hai configurato.
Test delle notifiche
Per testare la funzionalità di notifica per l'esempio utilizzato in questa guida, puoi invocare una compilazione eseguendo il comando gcloud builds submit
.
Nell'esempio seguente, specifichiamo success.yaml
come percorso della configurazione. L'esecuzione di questo comando dovrebbe produrre una build minima riuscita. Dovresti anche essere in grado di visualizzare un output dei log di compilazione.
gcloud builds submit --no-source --config=success.yaml
Dove success.yaml
è:
steps:
- name: busybox
args: ["true"]
Nell'esempio seguente, specifichiamo failure.yaml
come percorso di configurazione. L'esecuzione di questo comando dovrebbe comportare un errore di build. Invece di visualizzare un output dei log di compilazione, vedrai un output che ti informa che non è stata trovata alcuna corrispondenza per i filtri CEL specificati nell'origine.
gcloud builds submit --no-source --config=failure.yaml
Dove failure.yaml
è:
steps:
- name: busybox
args: ["false"]
Se hai creato un notificatore configurato per eseguire un'altra attività oltre a registrare l'output nei log del servizio Cloud Run, puoi anche eseguire il comando gcloud builds submit
per verificare la funzionalità di notifica. Per esaminare gli errori associati alla compilazione, controlla i log di Cloud Run per il tuo servizio. Per saperne di più, consulta
Visualizzazione dei log in Cloud Run.
Passaggi successivi
- Scopri di più sui notificatori di Cloud Build.
- Scopri come abbonarti alle notifiche di compilazione.