Configurer des notifications Slack

Cloud Build peut vous informer des mises à jour de votre état de compilation en vous envoyant des notifications aux canaux souhaités, tels que Slack ou votre serveur SMTP. Cette page explique comment configurer les notifications à l'aide du système d'alerte Slack.

Avant de commencer

  • Activer les API Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager.

    Activer les API

Systèmes d'alerte Cloud Build

Cloud Build envoie toutes les mises à jour d'état de compilation, ainsi que les métadonnées de compilation, à Pub/Sub sur le thème cloud-builds. Les systèmes d'alerte Cloud Build peuvent être configurés pour écouter ce sujet, filtrer les messages reçus et envoyer des messages à votre service.

Les systèmes d'alerte Cloud Build sont des images Docker pouvant être exécutées en tant que conteneurs sur Cloud Run. Lorsqu'ils sont interrogés par une application d'abonné, les systèmes d'alerte Cloud Build utilisent des abonnements Push pour distribuer les messages au service configuré. Tous les systèmes d'alerte utilisent une spécification YAML commune stockée dans Cloud Storage pour la configuration.

Cloud Build fournit et gère des images de système d'alerte déployables dans le dépôt cloud-build-notifiers. Le tableau suivant répertorie les systèmes d'alerte disponibles :

Système d'alerte Description
slack publie des messages dans un canal Slack à l'aide d'un webhook Slack
smtp envoie des e-mails via un serveur SMTP
http envoie une charge utile JSON à un autre point de terminaison HTTP

Configurer des notifications Slack

Pour configurer les notifications Slack à l'aide du système d'alerte Slack, procédez comme suit :

  1. Créez une application Slack pour l'espace de travail Slack de votre choix.

  2. Activez les webhooks entrants pour publier des messages depuis Cloud Build vers Slack.

  3. Accédez à votre application Slack pour localiser l'URL du webhook entrant. Votre URL ressemblera à ce qui suit :

    http://hooks.slack.com/services/...
    
  4. Stockez l'URL du webhook entrant dans Secret Manager :

    1. Ouvrez la page Secret Manager dans Google Cloud Console :

      Ouvrir la page Secret Manager

    2. Cliquez sur Créer un secret.

    3. Attribuez un nom à votre secret.

    4. Sous Valeur du secret, ajoutez l'URL du webhook entrant pour votre application Slack.

    5. Pour enregistrer votre secret, cliquez sur Créer un secret.

  5. Autorisez votre compte de service Cloud Run à accéder à votre secret :

    1. Accédez à la page IAM dans Google Cloud Console

      Ouvrir la page IAM

    2. Recherchez le compte de service Compute Engine par défaut associé à votre projet :

      Votre compte de service Compute Engine par défaut ressemble à ceci :

      project-number-compute@developer.gserviceaccount.com
      

      Prenez note du compte de service Compute Engine par défaut.

    3. Ouvrez la page Secret Manager dans Google Cloud Console :

      Ouvrir la page Secret Manager

    4. Cliquez sur le nom contenant le secret de votre application Slack.

    5. Dans l'onglet Autorisations, cliquez sur Ajouter un membre.

    6. Ajoutez le compte de service par défaut Compute Engine associé à votre projet en tant que membre.

    7. Sélectionnez l'autorisation Accesseur de secrets du gestionnaire de secrets comme rôle.

    8. Cliquez sur Enregistrer.

  6. Autorisez votre compte de service Cloud Run à lire et écrire dans des buckets Cloud Storage :

    1. Accédez à la page IAM dans Google Cloud Console

      Ouvrir la page IAM

    2. Recherchez le compte de service Compute Engine par défaut associé à votre projet :

      Votre compte de service Compute Engine par défaut ressemble à ceci :

      project-number-compute@developer.gserviceaccount.com
      
    3. Cliquez sur l'icône en forme de crayon sur la ligne contenant votre compte de service Compute Engine par défaut. L'onglet Modifier les autorisations s'affiche.

    4. Cliquez sur Ajouter un autre rôle.

    5. Ajoutez le rôle suivant :

      • Lecteur des objets Storage
    6. Cliquez sur Enregistrer.

  7. Rédigez un fichier de configuration du système d'alerte pour configurer votre système d'alerte Slack et filtrer les événements de compilation :

    Dans l'exemple de fichier de configuration du système d'alerte suivant, le champ filter utilise Common Expression Language avec la variable disponible, build, pour filtrer les événements de compilation à l'état SUCCESS :

    apiVersion: cloud-build-notifiers/v1
    kind: SlackNotifier
    metadata:
      name: example-slack-notifier
    spec:
      notification:
        filter: build.status == Build.Status.SUCCESS
        delivery:
          webhookUrl:
            secretRef: webhook-url
      secrets:
      - name: webhook-url
        value: projects/project-id/secrets/secret-name/versions/latest
    

    Où :

    • webhook-url est la variable de configuration utilisée dans cet exemple pour référencer le chemin d'URL du webhook Slack stocké dans Secret Manager. Le nom de la variable que vous spécifiez ici doit correspondre au champ name sous secrets.
    • project-id est l'ID de votre projet Cloud.
    • secret-name est le nom de votre secret contenant l'URL de votre webhook Slack.

    Pour afficher cet exemple, consultez le fichier de configuration du système d'alerte pour le système d'alerte Slack.

    Pour en savoir plus sur les champs supplémentaires que vous pouvez filtrer, consultez la ressource Build. Pour obtenir d'autres exemples de filtrage, consultez la section Filtrer les compilations dans les notifications.

  8. Importez votre fichier de configuration du système d'alerte dans un bucket Cloud Storage :

    1. Si vous n'avez pas de bucket Cloud Storage, exécutez la commande suivante pour créer un bucket, où bucket-name est le nom que vous souhaitez attribuer au bucket, sous réserve des règles de dénomination.

      gsutil mb gs://bucket-name/
      
    2. Importez le fichier de configuration du système d'alerte dans votre bucket :

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

      Où :

      • bucket-name est le nom du bucket.
      • config-file-name est le nom de votre fichier de configuration. Pour afficher un exemple de fichier de configuration pour le système d'alerte Slack, consultez la documentation slack.yaml.example.
  9. Déployez votre système d'alerte dans Cloud Run :

     gcloud run deploy service-name \
       --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/slack:latest \
       --no-allow-unauthenticated \
       --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
    

    Où :

    • service-name correspond au nom du service Cloud Run dans lequel vous déployez l'image.
    • config-path est le chemin d'accès au fichier de configuration de votre système d'alerte Slack, gs://bucket-name/config-file-name.
    • project-id est l'ID de votre projet Cloud.

    La commande gcloud run deploy extrait la dernière version de l'image hébergée à partir d'Artifact Registry de Cloud Build. Cloud Build est compatible avec les images de système d'alerte pendant neuf mois. Après neuf mois, Cloud Build supprime la version de l'image. Si vous souhaitez utiliser une version d'image antérieure, vous devez spécifier la version sémantique complète du tag d'image dans l'attribut image de votre commande gcloud run deploy. Vous pouvez trouver les versions et les tags d'image précédents dans Artifact Registry.

  10. Accordez des autorisations Pub/Sub pour créer des jetons d'authentification dans votre projet :

     gcloud projects add-iam-policy-binding project-id \
       --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \
       --role=roles/iam.serviceAccountTokenCreator
    

    Où :

    • project-id est l'ID de votre projet Cloud.
    • project-number est le numéro de votre projet Cloud.
  11. Créez un compte de service pour représenter l'identité de votre abonnement Pub/Sub :

    gcloud iam service-accounts create cloud-run-pubsub-invoker \
      --display-name "Cloud Run Pub/Sub Invoker"
    

    Vous pouvez utiliser cloud-run-pubsub-invoker ou utiliser un nom unique dans votre projet Google Cloud.

  12. Accordez au compte de service cloud-run-pubsub-invoker l'autorisation Cloud Run 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
    

    Où :

    • service-name correspond au nom du service Cloud Run dans lequel vous déployez l'image.
    • project-id est l'ID de votre projet Cloud.
  13. Créez le sujet cloud-builds pour recevoir des messages de mise à jour de compilation pour votre système d'alerte :

    gcloud pubsub topics create cloud-builds
    
  14. Créez un abonné push Pub/Sub pour votre système d'alerte :

     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
    

    Où :

    • subscriber-id est le nom que vous souhaitez donner à votre abonnement.
    • service-url est l'URL générée par Cloud Run pour votre nouveau service.
    • project-id est l'ID de votre projet Cloud.

Les notifications pour votre projet Cloud Build sont maintenant configurées. Vous recevrez une notification dans Slack la prochaine fois que vous appellerez une compilation correspondant au filtre que vous avez configuré.

Automatiser la configuration des notifications pour Slack

Le dépôt cloud-build-notifier contient un script d'installation, setup.sh, qui automatise la configuration décrite dans la section Configurer les notifications Slack. Avant d'exécuter le script, assurez-vous d'avoir créé un code secret pour l'URL de webhook entrant à l'aide du gestionnaire de secrets, comme indiqué ci-dessus. Pour automatiser la configuration des notifications pour Slack, procédez comme suit :

  1. Clonez le dépôt cloud-build-notifier.

  2. Exécutez la commande suivante à la racine du dépôt :

     ./setup.sh slack config-path secret-name
    

    Où :

    • config-path est le chemin d'accès au fichier de configuration de vos systèmes d'alerte.
    • secret-name est le nom du secret stocké dans Secret Manager.

Une fois le script exécuté, le message suivant s'affiche :

** NOTIFIER SETUP COMPLETE **

Votre système d'alerte Slack est maintenant configuré. Vous pouvez afficher le script complet dans le dépôt cloud-build-notifier ou exécuter ./setup.sh --help pour obtenir les instructions d'utilisation associées au script.

Étape suivante