Cloud Build puede notificarte sobre actualizaciones de tu estado de compilación mediante el envío de notificaciones a los canales seleccionados. Además de los notificadores que mantiene Cloud Build, como Slack o SMTP, también puedes usar la biblioteca proporcionada en el repositorio cloud-build-notifiers para crear tu propio notificador.
En esta página, se explica cómo crear tu propio notificador.
Antes de comenzar
-
Enable the Cloud Build, Cloud Run, Pub/Sub, and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Instala el lenguaje de programación Go.
Instala Google Cloud CLI.
Configuración
Abre una ventana de la terminal en tu máquina.
Clona y navega al repositorio cloud-build-notifiers:
git clone https://github.com/GoogleCloudPlatform/cloud-build-notifiers.git && cd cloud-build-notifiersAgrega un directorio para tu propio notificador y navega hasta él, en el que DIRECTORY_NAME es el nombre de tu directorio:
mkdir DIRECTORY_NAME && cd DIRECTORY_NAMEInicializa los módulos de Go en tu directorio nuevo, en el que DIRECTORY_NAME es el nombre de tu directorio nuevo:
go mod init github.com/GoogleCloudPlatform/cloud-build-notifiers/DIRECTORY_NAMEAhora deberías ver un archivo
go.moden tu directorio.Agrega la siguiente línea a tu archivo
go.modpara asegurarte de usar la versión más reciente de los notificadores:replace github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers => ../
Tus dependencias ya están configuradas y estás listo para crear tu propio notificador.
Crea tu propio notificador
cloud-build-notifiers contiene un directorio lib/notifiers. En el directorio lib/notifiers, verás un archivo llamado notifier.go. Este archivo contiene el framework que puedes usar para crear tu propio notificador.
Deberás definir dos métodos para crear un notificador en tu archivo principal.
En el directorio nuevo, crea un archivo llamado
main.go.En
main.go, importa el framework de la biblioteca de notificadores y cualquier otra dependencia:Define un método principal para el notificador. En este ejemplo,
loggeres el nombre del notificador:El método
mainusa el métodoMaindefinido en el archivonotifier.go, que se usa para configurar los objetos binarios del notificador.Define una estructura para tu notificador, en la que definirás las variables de la interfaz. En este ejemplo,
loggeres el nombre del notificador:Agrega la funcionalidad del notificador. La interfaz del notificador se define con dos métodos:
SetUp: El métodoSetUpacepta una configuración, recupera secretos y extrae filtros específicos de la configuración y los almacena como un predicado de Common Expression Language que se puede usar para enviar notificaciones. Para obtener más información sobre CEL, consulta el repositoriocel-spec.SendNotification: El métodoSendNotificationes el que se usa para enviar notificaciones al canal o servicio seleccionado.La definición del notificador está disponible en
notifier.goy en la documentación de Go.En el siguiente ejemplo, la interfaz del notificador se define con
SetUpy el métodoSendNotificationpara imprimir los registros de compilación, conloggercomo el nombre de tu notificador:Tu archivo final
main.godebería ser similar al siguiente archivo. En este ejemplo,loggerse usa como el nombre del notificador.
A continuación, configura el notificador.
Configurar las notificaciones
Escribe un archivo de configuración de notificador para configurar tu notificador y filtrar los eventos de compilación:
En el siguiente ejemplo de archivo de configuración del notificador, el campo
filterusa CEL con la variable disponible,build, para filtrar los eventos de compilación con un estadoSUCCESS:Aquí:
logging-samplees el nombre del notificador.
Para ver campos adicionales por los que puedes filtrar, consulta el recurso Compilar. Si deseas ver ejemplos adicionales de filtros, consulta Usa CEL para filtrar eventos de compilación.
Sube tu archivo de configuración de notificador a un bucket de Cloud Storage:
Si no tienes un bucket de Cloud Storage, ejecuta el siguiente comando para crear uno, en el que BUCKET_NAME es el nombre que deseas asignar a tu bucket, sujeto a los requisitos de nombres.
gcloud storage buckets create gs://BUCKET_NAME/Sube el archivo de configuración del notificador a tu bucket:
gcloud storage cp CONFIG_FILE_NAME gs://BUCKET_NAME/CONFIG_FILE_NAMEAquí:
BUCKET_NAMEes el nombre de tu depósito.CONFIG_FILE_NAMEes el nombre de tu archivo de configuración.
Compila e implementa tu notificador:
Crea un Dockerfile para
logging-sample:Compila e implementa el notificador con el siguiente archivo
cloudbuild.yaml.Aquí:
_CONFIG_PATHes la ruta de acceso a la configuración del notificador, comogs://BUCKET_NAME/CONFIG_FILE_NAME.yaml.
Para ejecutar
cloudbuild.yaml, pasa la ruta del notificador como una variable de sustitución.gcloud builds submit . --substitutions=_CONFIG_PATH=gs://BUCKET_NAME/CONFIG_FILE_NAMEOtorga permisos de Pub/Sub para crear tokens de autenticación en tu proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreatorAquí:
PROJECT_IDes el ID de tu proyecto de Google Cloud .PROJECT_NUMBERes el número de tu proyecto de Google Cloud .
Crea una cuenta de servicio para representar tu identidad de suscripción de Pub/Sub:
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"Puedes usar
cloud-run-pubsub-invokero un nombre único dentro de tu proyecto Google Cloud .Otorga el permiso
Invokerde Cloud Run a la cuenta de servicio decloud-run-pubsub-invoker:gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invokerAquí:
SERVICE_NAMEes el nombre del servicio de Cloud Run en el que se implementa la imagen.PROJECT_IDes el ID de tu proyecto de Google Cloud .
Crea el tema
cloud-buildspara recibir mensajes de actualización de compilación para tu notificador:gcloud pubsub topics create cloud-buildsTambién puedes definir un nombre de tema personalizado en tu archivo de configuración de compilación para que los mensajes se envíen al tema personalizado. En este caso, crearías un tema con el mismo nombre de tema personalizado:
gcloud pubsub topics create topic-namePara obtener más información, consulta Temas de Pub/Sub para las notificaciones de compilación.
Crea un suscriptor de envío de Pub/Sub para tu notificador:
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.comAquí:
subscriber-ides el nombre que quieres darle a tu suscripción.service-urles la URL generada por Cloud Run para tu nuevo servicio.project-ides el ID de tu proyecto de Google Cloud .
Las notificaciones de tu proyecto de Cloud Build ya están configuradas. La próxima vez que invoques una compilación, recibirás una notificación en tu canal si la compilación coincide con el filtro que configuraste.
Notificaciones de prueba
Para probar las notificaciones del ejemplo que se usa en esta guía, puedes invocar una compilación ejecutando el comando gcloud builds submit.
En el siguiente ejemplo, especificamos success.yaml como la ruta de configuración. Ejecutar este comando debería dar como resultado una compilación mínima exitosa. También deberías ver un resultado de los registros de tu compilación.
gcloud builds submit --no-source --config=success.yaml
En el ejemplo anterior, success.yaml es:
steps:
- name: busybox
args: ["true"]
En el siguiente ejemplo, especificamos failure.yaml como la ruta de configuración. Si ejecutas este comando, la compilación fallará. En lugar de ver un resultado de tus registros de compilación, verás un resultado que te informa que no hubo ninguna coincidencia para los filtros de CEL que especificaste en la fuente.
gcloud builds submit --no-source --config=failure.yaml
En el ejemplo anterior, failure.yaml es:
steps:
- name: busybox
args: ["false"]
Si creaste un notificador que está configurado para realizar otra tarea que no sea el resultado del registro en los registros del servicio de Cloud Run, también puedes ejecutar el comando gcloud builds submit para probar tus notificaciones.
Para examinar los errores asociados con tu compilación, verifica los registros de Cloud Run de tu servicio. Para obtener más información, consulta Visualiza los registros en Cloud Run.
¿Qué sigue?
- Obtén información sobre los notificadores de Cloud Build.
- Obtén más información sobre cómo suscribirte a las notificaciones de compilación.