Configura notificaciones SMTP

Cloud Build puede notificarte sobre actualizaciones de compilación mediante el envío de notificaciones a los canales deseados, como Slack o tu servidor SMTP. En esta página, se explica cómo configurar las notificaciones con el notificador SMTP.

Antes de comenzar

  • Habilita las API de Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager.

    Habilita las API

Notificadores de Cloud Build

Cloud Build envía todas las actualizaciones de eventos de compilación, junto con los metadatos de compilación, a Pub/Sub en el tema cloud-builds. Los notificadores de Cloud Build pueden configurarse para escuchar ese tema, filtrar los mensajes que reciben y enviar mensajes a tu servicio.

Los notificadores de Cloud Build son imágenes de Docker que se pueden ejecutar como contenedores en Cloud Run. Cuando los sondea una aplicación de suscriptor, los notificadores de Cloud Build usan suscripciones de envío para entregar mensajes al servicio configurado. Todos los notificadores usan una especificación YAML común para la configuración, almacenada en Cloud Storage.

Cloud Build proporciona y mantiene imágenes implementables del notificador en el repositorio cloud-build-notifiers. En la siguiente tabla, se enumeran los notificadores disponibles:

Notificador Descripción
bigquery Escribe datos de compilación en una tabla de BigQuery
http envía una carga útil JSON a otro extremo HTTP
slack usa un webhook de Slack para publicar mensajes en un canal de Slack
smtp envía correos electrónicos a través de un servidor SMTP

Configura las notificaciones de correo electrónico

Para enviar notificaciones por correo electrónico, necesitarás un servidor SMTP en ejecución y acceso a una cuenta en ese servidor, incluido el nombre de usuario y la contraseña de la cuenta que se usarán para enviar notificaciones. Asegúrate de que las cuotas de entrega del servidor SMTP puedan manejar el volumen de correo electrónico que crees que se generará.

En la siguiente sección, se explica cómo puedes configurar las notificaciones por correo electrónico de forma manual mediante el notificador SMTP. En cambio, si deseas automatizar la configuración, consulta Automatiza la configuración para las notificaciones.

Para configurar las notificaciones de correo electrónico, haz lo siguiente:

  1. Guarda la contraseña de la cuenta de correo electrónico del remitente en el administrador de secretos:

    1. Abre la página Administrador de secretos en Google Cloud Console:

      Abrir la página Administrador de secretos

    2. Haz clic en Crear secreto.

    3. Ingresa un nombre para tu secreto.

    4. En Valor del secreto, agrega la contraseña de la cuenta de correo electrónico del remitente.

    5. Para guardar el secreto, haz clic en Crear secreto.

  2. Permite que tu cuenta de servicio de Cloud Run acceda al secreto:

    1. Ve a la página de IAM en Google Cloud Console:

      Abrir la página IAM

    2. Busca la cuenta de servicio predeterminada de Compute Engine asociada con tu proyecto:

      La cuenta de servicio predeterminada de Compute Engine tendrá un aspecto similar al siguiente:

      project-number-compute@developer.gserviceaccount.com
      

      Anota tu cuenta de servicio predeterminada de Compute Engine.

    3. Abre la página Administrador de secretos en Google Cloud Console:

      Abrir la página Administrador de secretos

    4. Haz clic en el nombre del secreto que contiene el secreto de la contraseña de la cuenta de correo electrónico del remitente.

    5. En la pestaña Permisos, haz clic en Agregar miembro.

    6. Agrega la cuenta de servicio predeterminada de Compute Engine asociada con tu proyecto como miembro.

    7. Selecciona el permiso Administrador y descriptor de acceso a secretos como la función.

    8. Haga clic en Save.

  3. Otorga a tu cuenta de servicio de Cloud Run permiso para leer y escribir en los buckets de Cloud Storage:

    1. Ve a la página de IAM en Google Cloud Console:

      Abrir la página IAM

    2. Busca la cuenta de servicio predeterminada de Compute Engine asociada con tu proyecto:

      La cuenta de servicio predeterminada de Compute Engine tendrá un aspecto similar al siguiente:

      project-number-compute@developer.gserviceaccount.com
      
    3. Haz clic en el ícono de lápiz en la fila que contiene tu cuenta de servicio predeterminada de Compute Engine. Verás la pestaña Editar permisos.

    4. Haz clic en Agregar otra función.

    5. Agrega la siguiente función:

      • Visualizador de objetos de almacenamiento
    6. Haga clic en Save.

  4. Escribe un archivo de configuración de notificador para configurar tu notificador SMTP y filtrar los eventos de compilación:

    En el siguiente ejemplo de archivo de configuración del notificador, el campo filter usa Common Expression Language con la variable disponible, build, para filtrar los eventos de compilación con un estado SUCCESS:

    apiVersion: cloud-build-notifiers/v1
    kind: SMTPNotifier
    metadata:
      name: example-smtp-notifier
    spec:
      notification:
        filter: build.status == Build.Status.SUCCESS
        delivery:
          server: server-host-name
          port: "port"
          sender: sender-email
          from: from-email
          recipients:
            - recipient-email
            # optional: more emails here
          password:
            secretRef: smtp-password
      secrets:
      - name: smtp-password
        value: projects/project-id/secrets/secret-name/versions/latest
    

    Aquí:

    • server-host-name es la dirección de tu servidor SMTP.
    • port es el puerto que manejará las solicitudes SMTP. Este valor se debe especificar como una string.
    • sender-email es la dirección de correo electrónico de la cuenta del remitente que ve el server-host-name especificado.
    • from-email es la dirección de correo electrónico que ven los destinatarios.
    • recipient-email es una lista de una o más direcciones de correo electrónico para recibir mensajes del remitente.
    • smtp-password es la variable de configuración que se usa en este ejemplo para hacer referencia a la contraseña de la cuenta de correo electrónico del remitente almacenada en el Administrador de secretos. El nombre de la variable que especifiques aquí debe coincidir con el campo name debajo de secrets.
    • project-id es el ID de tu proyecto de Cloud.
    • secret-name es el nombre del secreto que contiene la contraseña de la cuenta de correo electrónico del remitente.

    Para ver el ejemplo, consulta el archivo de configuración del notificador para el notificador SMTP.

    Para ver campos adicionales por los que puedes filtrar, consulta el recurso Compilar. Para ver ejemplos adicionales de filtrado, consulta Cómo usar CEL para filtrar eventos de compilación.

  5. Sube tu archivo de configuración de notificador a un bucket de Cloud Storage:

    1. Si no tienes un depósito de Cloud Storage, ejecuta el siguiente comando para crear un depósito, en el que bucket-name es el nombre que deseas asignar a tu depósito, sujeto a los requisitos de nombres.

      gsutil mb gs://bucket-name/
      
    2. Sube el archivo de configuración del notificador a tu bucket:

      gsutil cp config-file-name gs://bucket-name/config-file-name
      

      Aquí:

      • bucket-name es el nombre de tu depósito.
      • config-file-name es el nombre de tu archivo de configuración.
  6. Implementa tu notificador en 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
    

    Aquí:

    • service-name es el nombre del servicio de Cloud Run en el que se implementa la imagen.
    • config-path es la ruta al archivo de configuración del notificador para tu notificador SMTP, gs://bucket-name/config-file-name.
    • project-id es el ID de tu proyecto de Cloud.

    El comando gcloud run deploy extrae la última versión de la imagen alojada de Artifact Registry de Cloud Build. Cloud Build es compatible con imágenes de notificador durante nueve meses. Después de nueve meses, Cloud Build borra la versión con imágenes. Si deseas usar una versión con imágenes anterior, deberás especificar la versión semántica completa de la etiqueta de imagen en el atributo image de tu comando gcloud run deploy. Puedes encontrar etiquetas y versiones con imágenes anteriores en Artifact Registry.

  7. Otorga 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.serviceAccountTokenCreator
    

    Aquí:

    • project-id es el ID de tu proyecto de Cloud.
    • project-number es el número de proyecto de Cloud.
  8. 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-invoker o un nombre único dentro de tu proyecto de Google Cloud.

  9. Otorga el permiso Invoker de Cloud Run a la cuenta de servicio de cloud-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.invoker
    

    Aquí:

    • service-name es el nombre del servicio de Cloud Run en el que se implementa la imagen.
    • project-id es el ID de tu proyecto de Cloud.
  10. Crea el tema cloud-builds a fin de recibir mensajes de actualización de compilación para tu notificador:

    gcloud pubsub topics create cloud-builds
    
  11. 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.com
    

    Aquí:

    • subscriber-id es el nombre que quieres darle a tu suscripción.
    • service-url es la URL generada por Cloud Run para tu nuevo servicio.
    • project-id es el ID de tu proyecto de Cloud.

Las notificaciones de tu proyecto de Cloud Build ya están configuradas. La próxima vez que invoques una compilación, los recipients especificados recibirán un correo electrónico con una notificación si la compilación coincide con el filtro que configuraste.

¿Qué sigue?