Cloud Build può inviarti notifiche sugli aggiornamenti dello stato della build ai canali selezionati. 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 il tuo notificatore.
Prima di iniziare
Abilita le API Cloud Build, 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 il linguaggio di programmazione Go.
Installa la Google Cloud CLI.
Configurazione
Apri una finestra del terminale sulla tua macchina.
Clona il repository cloud-build-notifiers e vai al suo interno:
git clone https://github.com/GoogleCloudPlatform/cloud-build-notifiers.git && cd cloud-build-notifiersAggiungi una directory per il tuo notificatore e vai al suo interno, dove DIRECTORY_NAME è il nome della directory:
mkdir DIRECTORY_NAME && cd DIRECTORY_NAMEInizializza i moduli Go nella nuova directory, dove DIRECTORY_NAME è il nome della nuova directory:
go mod init github.com/GoogleCloudPlatform/cloud-build-notifiers/DIRECTORY_NAMEOra dovresti vedere un file
go.modnella directory.Aggiungi la seguente riga al file
go.modper assicurarti di utilizzare l'ultima versione dei notificatori:replace github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers => ../
Le dipendenze sono ora configurate e puoi creare il tuo notificatore.
Creazione di un notificatore personalizzato
cloud-build-notifiers contiene una directory lib/notifiers. Nella directory lib/notifiers vedrai un file denominato notifier.go. Questo file contiene il framework che puoi utilizzare per creare il tuo notificatore.
Dovrai definire due metodi per creare un notificatore nel file principale.
Nella nuova directory, crea un file denominato
main.go.In
main.go, importa il framework della libreria dei notificatori e qualsiasi altra dipendenza:Definisci un metodo principale per il notificatore. In questo esempio,
loggerè il nome del notificatore:Il metodo
mainutilizza il metodoMaindefinito nel filenotifier.go, che viene utilizzato per configurare i file binari del notificatore.Definisci una struct per il notificatore, in cui definirai le variabili per l'interfaccia. In questo esempio,
loggerè il nome del notificatore:Aggiungi la funzionalità del notificatore. L'interfaccia del notificatore è definita da due metodi:
SetUp: il metodoSetUpaccetta una configurazione, recupera i secret ed estrae i filtri specificati dalla configurazione e li archivia come predicato Common Expression Language che può essere utilizzato per inviare notifiche. Per saperne di più su CEL, consulta ilcel-specrepository.SendNotification: il metodoSendNotificationviene utilizzato per inviare notifiche al canale o al servizio selezionato.La definizione del notificatore è disponibile in
notifier.goe nella documentazione di Go.Nell'esempio seguente, l'interfaccia del notificatore viene definita utilizzando i metodi
SetUpeSendNotificationper stampare i log di build, conloggercome nome del notificatore:Il file
main.gofinale dovrebbe essere simile al seguente. In questo esempio,loggerviene utilizzato come nome del notificatore.
Quindi, configura il notificatore.
Configurare le notifiche
Scrivi un file di configurazione del notificatore per configurare il notificatore e filtrare gli eventi di build:
Nel seguente file di configurazione del notificatore di esempio, il campo
filterutilizza CEL con la variabile disponibile,build, per filtrare gli eventi di build con lo statoSUCCESS:Dove:
logging-sampleè il nome del notificatore.
Per altri campi in base ai quali puoi filtrare, consulta la risorsa Build. Per altri esempi di filtro, consulta Utilizzo di CEL per filtrare gli eventi di build.
Carica il file di configurazione del notificatore in un bucket Cloud Storage:
Se non hai un bucket Cloud Storage, esegui il seguente comando per creare un bucket, dove BUCKET_NAME è il nome che vuoi assegnare al bucket, soggetto a requisiti di denominazione.
gcloud storage buckets create gs://BUCKET_NAME/Carica il file di configurazione del notificatore nel bucket:
gcloud storage cp CONFIG_FILE_NAME gs://BUCKET_NAME/CONFIG_FILE_NAMEDove:
BUCKET_NAMEè il nome del bucket.CONFIG_FILE_NAMEè il nome del file di configurazione.
Crea ed esegui il deployment del notificatore:
Crea un Dockerfile per
logging-sample:Crea ed esegui il deployment del 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, trasmetti il percorso del notificatore come variabile di sostituzione.gcloud builds submit . --substitutions=_CONFIG_PATH=gs://BUCKET_NAME/CONFIG_FILE_NAMEConcedi 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.serviceAccountTokenCreatorDove:
PROJECT_IDè l'ID del tuo Google Cloud progetto.PROJECT_NUMBERè il numero del tuo progetto Google Cloud .
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 su 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 di 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 di 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, riceverai una notifica nel tuo canale se la build corrisponde al filtro che hai configurato.
Notifiche di test
Per testare le notifiche per l'esempio utilizzato in questa guida, puoi richiamare una build eseguendo il comando gcloud builds submit.
Nell'esempio seguente, specifichiamo success.yaml come percorso di configurazione. L'esecuzione di questo comando dovrebbe generare una build minima riuscita. Dovresti anche essere in grado di visualizzare un output dei log di build.
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 generare una build non riuscita. Anziché visualizzare un output dei log di build, 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à diversa dalla registrazione dell'output nei log del servizio Cloud Run, puoi anche eseguire il comando gcloud builds submit per testare le notifiche.
Per esaminare gli errori associati alla build, 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 sottoscrivere le notifiche di build.