Activation des notifications d'événements pour les chaînes d'outils

Continuous Delivery sera supprimé dans les régions suivantes le 12 février 2027 : au-syd, ca-tor, us-east. Code Risk Analyzer sera également retiré du marché dans toutes les régions à cette date. Si ces fonctionnalités ne sont pas activement utilisées dans une région donnée, elles pourraient y être supprimées plus tôt et ne plus accepter de nouvelles instances. En savoir plus

En tant qu'administrateur de IBM Cloud® Continuous Delivery chaînes d'outils, vous pouvez envoyer des notifications d'événements dans une chaîne d'outils ou une intégration d'outils à d'autres utilisateurs ou à des destinataires humains, par e-mail, SMS, Slack ou d'autres canaux de distribution PagerDuty, pris en charge. Vous pouvez également envoyer ces notifications d'événements à d'autres applications afin de créer une logique à l'aide de la programmation événementielle, en utilisant par exemple des webhooks. Cette approche est rendue possible par l'intégration entre les chaînes d'outils et IBM Cloud® Event Notifications.

Pour envoyer des informations à Event Notifications, vous devez ajouter une intégration d'outils Event Notifications à votre chaîne d'outils. Pour plus d'informations sur l'utilisation de Event Notifications, voir Initiation à Event Notifications.

Vous pouvez désormais distribuer des notifications d'événements en utilisant l'intégration de l'outil Event NotificationsEvent Notifications est la méthode préférée pour distribuer des notifications à Slack et à d'autres canaux de communication tels que PagerDuty, email, SMS, notifications push, webhook, Microsoft® Teams, ServiceNow, et IBM Cloud Functions.

Comment les événements sont collectés et envoyés par les chaînes d'outils

Lorsqu'un événement d'intérêt se produit dans une chaîne d'outils ou l'une des intégrations d'outils prises en charge, la chaîne d'outils communique avec une instance Event Notifications connectée pour transmettre une notification à une destination prise en charge.

Les chaînes d'outils prennent en charge deux types d'événement:

  • Les événements intégrés sont générés automatiquement dans une chaîne d'outils. Par exemple, des événements intégrés sont envoyés lorsque des intégrations d'outils sont ajoutées à ou supprimées d'une chaîne d'outils, lorsque les exécutions de pipeline démarrent et lorsque les exécutions de pipeline se terminent. Le contenu d'un événement intégré est constitué de données déterminées par la chaîne d'outils.
  • Les événements personnalisés du client sont générés par une chaîne d'outils à la demande d'un client à l'aide de l'API POST /toolchains/{toolchain_id}/events. Le contenu d'un événement client sur mesure se compose de données déterminées par la chaîne d'outils et de données fournies à l'API par le client.

Les étapes du pipeline Tekton peuvent tirer parti de l'API POST {toolchain_id} /toolchains//events personnalisée du client pour envoyer des événements personnalisés à Event Notifications des destinations contenant des informations pertinentes et significatives pour les étapes.

Evénements de Continuous Delivery

Le tableau suivant répertorie les événements de la chaîne d'outils.

Les caractères :1 qui sont ajoutés à chaque sous-type représentent les numéros de version majeure.

Actions qui génèrent des notifications d'événements
Nom de l’événement Type d'événement Sous-type Description
Client event com.ibm.cloud.toolchain.client event:1 Cet événement client sur mesure est envoyé lorsqu'un client appelle l'API POST /toolchains/{toolchain_id}/events.
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 Cet événement intégré est envoyé lorsqu'une intégration d'outils est créée et ajoutée à une chaîne d'outils.
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 Cet événement intégré est envoyé lorsqu'une intégration d'outils est supprimée et retirée d'une chaîne d'outils.
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 Cet événement intégré est envoyé lorsqu'une exécution de pipeline Tekton ou une étape de pipeline classique démarre.
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 Cet événement intégré est envoyé lorsqu'une exécution de pipeline Tekton ou une étape de pipeline classique aboutit.
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 Cet événement intégré est envoyé lorsqu'une exécution de pipeline Tekton ou une étape de pipeline Classic se termine avec un statut d'échec. Par exemple, cet événement est envoyé lorsqu'un déploiement est tenté, mais qu'il échoue.
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 Cet événement intégré est envoyé lorsqu'une exécution de pipeline Tekton ou une étape de pipeline classique est annulée.
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 Cet événement intégré est envoyé lorsqu'une exécution de pipeline Tekton rencontre une erreur et ne s'est probablement pas terminée correctement. Cet événement est principalement utilisé pour les problèmes d'infrastructure et de configuration, par exemple lorsque Tekton mal formé empêche l'exécution du pipeline de démarrer.

Activation des notifications

Les événements intégrés et sur mesure du client qui sont générés par une chaîne d'outils ou une intégration d'outils associée peuvent être transmis à une instance de service Event Notifications disponible dans le même compte.

Assurez-vous que l'instance de service Event Notifications sélectionnée dispose d'une politique d'autorisation IAM qui permet à la chaîne d'outils d'envoyer des événements à cette instance de service. Pour plus d'informations sur l'octroi d'une autorisation avec l'instance Event Notifications de service, consultez Pourquoi l'autorisation d'intégrer une Event Notifications instance m'est-elle refusée?.

Connexion à Event Notifications dans la console

Configurez Event Notifications pour envoyer des événements critiques à partir des chaînes d'outils et des instances d'intégration d'outils:

  1. Si vous disposez d’une chaîne d’outils et que vous souhaitez y ajouter l’intégration de cet outil, dans la console d’ IBM Cloud, cliquez sur l’icône de menu (icône en forme de hamburger) > Automatisation de la plateforme > Chaînes d’outils. Sur la page Chaînes d'outils, cliquez sur la chaîne d'outils afin d'ouvrir sa page Vue d'ensemble.

    a. Cliquez sur Ajouter un outil.

    b. Dans la section Intégrations d'outils, cliquez sur Event Notifications.

  2. Entrez le nom que vous souhaitez afficher pour cette intégration d'outils sur la carte Event Notifications de votre chaîne d'outils. Ce nom est utilisé pour identifier l'intégration d'outils dans votre chaîne d'outils.

  3. Sélectionnez l'instance Event Notifications à laquelle connecter la chaîne d'outils.

  4. Cliquez sur Créer une intégration pour ajouter l'intégration de l'outil Event Notifications à votre chaîne d'outils.

  5. Sur la page Vue d'ensemble de votre chaîne d'outils, sur la carte des outils IBM Cloud, cliquez sur Event Notifications.

Connexion à Event Notifications avec l'API

Vous pouvez ajouter l'intégration d'outils Event Notifications à votre chaîne d'outils à l'aide de l'API.

  1. Obtenez un jeton bearer IAM. Sinon, si vous utilisez un SDK, obtenez une clé d'API IAM et définissez les options client à l'aide de variables d'environnement.

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. Recherchez l'ID de la chaîne d'outils dans laquelle vous souhaitez créer votre intégration d'outils.

  3. Spécifiez eventnotifications comme tool_type_id.

  4. Spécifiez les tool_parameters suivants qui sont requis par l'intégration d'outils:

    • name: nom utilisé pour identifier l'intégration d'outils Event Notifications.
    • instance-crn: nom de ressource de cloud (CRN) de l'instance de service Event Notifications.
  5. Ajouter l'intégration de l'outil au sein de la chaîne d'outils ciblée.

    curl -X POST --location --header "Authorization: Bearer {iam_token}" \
      --header "Accept: application/json" \
      --header "Content-Type: application/json" \
      --data '{ "name": "{tool_name}", "tool_type_id": "eventnotifications", "parameters": { "name": {event_notifications_tool_integration_name}, "instance-crn": {event_notifications_service_crn} } }' \
      "{base_url}/toolchains/{toolchain_id}/tools"
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    const toolchainService = CdToolchainV2.newInstance();
    ...
    (async() => {
       const toolParameters = {
          "name": {event_notifications_tool_integration_name},
          "instance-crn": {event_notifications_service_crn}
       }
       const toolPrototypeModel = {
          toolchainId: {toolchain_id},
          toolTypeId: "eventnotifications",
          name: {tool_name},
          parameters: toolParameters
       };
       const response = await toolchainService.createTool(toolPrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    toolParameters := map[string]interface{}{
       "name": {event_notifications_tool_integration_name},
       "instance-crn": {event_notifications_service_crn},
    }
    createToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "eventnotifications")
    createToolOptions.SetName({tool_name})
    createToolOptions.SetParameters(toolParameters)
    tool, response, err := toolchainClient.CreateTool(createToolOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    tool_parameters = {}
    tool_parameters["name"] = {event_notifications_tool_integration_name}
    tool_parameters["instance-crn"] = {event_notifications_service_crn}
    tool = toolchain_service.create_tool(
       name = {tool_name},
       toolchain_id = {toolchain_id},
       tool_type_id = "eventnotifications",
       parameters = tool_parameters
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    HashMap<String, Object> toolParameters = new HashMap<>();
    toolParameters.put("name", {event_notifications_tool_integration_name});
    toolParameters.put("instance-crn", {event_notifications_service_crn});
    CreateToolOptions createToolOptions = new CreateToolOptions.Builder()
       .name({tool_name})
       .parameters(toolParameters)
       .toolchainId({toolchain_id})
       .toolTypeId("eventnotifications")
       .build();
    Response<ToolchainToolPost> response = toolchainService.createTool(createToolOptions).execute();
    ToolchainToolPost tool = response.getResult();
    

Le tableau suivant répertorie et décrit chacune des variables utilisées dans les étapes précédentes.

Variables pour le provisionnement de l'intégration de l'outil avec l'API
Variable Description
{base_url} Le point de terminaison de URL l'API Toolchain. Pour plus d'informations sur les valeurs prises en charge, consultez la section Point de terminaison URL.
{iam_api_key} Votre clé d'API IAM.
{iam_token} Un jeton IAM de type bearer valide.
{tool_name} Nom de l'intégration d'outils.
{event_notifications_tool_integration_name} Nom de l'instance du service Event Notifications.
{event_notifications_service_crn} Le nom de ressource cloud (CRN) de l'instance du service Event Notifications.
{toolchain_id} Chaîne d'outils dans laquelle créer l'intégration d'outils.

Ajout d'une intégration d'outils à Terraform

Vous pouvez ajouter l'intégration d'outils Event Notifications à votre chaîne d'outils à l'aide de Terraform.

IBM Cloud La version Terraform 1.53.0 provider ou ultérieure est requise pour ajouter une intégration d'outil à l'aide de Terraform.

  1. Pour installer l'interface de ligne de commande (CLI) de Terraform et configurer le plug-in du fournisseur IBM Cloud pour Terraform, suivez le tutoriel Premiers pas avec Terraform disponible sur IBM Cloud®.

  2. Créez un fichier de configuration Terraform nommé main.tf. Dans ce fichier, ajoutez la configuration permettant de créer des instances de ressources à l'aide du langage de configuration HashiCorp (HCL). Pour plus d'informations sur l'utilisation de ce langage de configuration, voir la documentation Terraform.

    L'exemple suivant crée une intégration d'outils Delivery Pipeline en utilisant la ressource ibm_cd_toolchain_tool_pipeline, où toolchain_id est un identificateur global unique qui représente la chaîne d'outils dans laquelle créer l'intégration d'outils.

    data "ibm_cd_toolchain" "cd_toolchain" {
      toolchain_id = {toolchain_id}
    }
    resource "ibm_cd_toolchain_tool_eventnotifications" "en_instance" {
      toolchain_id = data.ibm_cd_toolchain.cd_toolchain.id
      parameters {
        name = "{event_notifications_tool_integration_name}"
        instance_crn = "{event_notifications_service_crn}"
      }
    }
    

    Pour plus d'informations sur les ressources d'intégration d'outils, voir la liste complète des ressources d'intégration d'outils prises en charge dans le Registre Terraform IBM Cloud.

  3. Initialisez l'interface de ligne de commande de Terraform.

    terraform init
    
  4. Créez un plan d'exécution Terraform. Ce plan récapitule les actions à exécuter pour créer l'intégration d'outils.

    terraform plan
    
  5. Appliquer le plan d’exécution Terraform. Terraform effectue les actions requises pour créer l'intégration d'outils.

    terraform apply
    

Le tableau suivant répertorie et décrit chacune des variables utilisées dans les étapes précédentes.

Variables pour le provisionnement de l'intégration de l'outil avec l'API
Variable Description
{event_notifications_tool_integration_name} Nom de l'instance du service Event Notifications.
{event_notifications_service_crn} CRN de l'instance de service Event Notifications.
{toolchain_id} Chaîne d'outils dans laquelle créer l'intégration d'outils.

Distribution de notifications pour sélectionner des destinations

Après avoir activé les notifications d'événements pour une chaîne d'outils, créez des rubriques, des destinations et des abonnements dans Event Notifications afin que les alertes puissent être transmises et distribuées aux destinations sélectionnées.

Pour obtenir la liste complète des destinations prises en charge, voir la documentation Event Notifications.

Détails du contenu de la notification

Les événements générés par les chaînes d'outils et les instances d'intégration d'outils associées contiennent diverses zones qui vous aident à identifier la source et les détails d'un événement.

L'API POST {toolchain_id} /toolchains//events renverra un code d'état 200 pour indiquer que la requête a été traitée. Cela ne signifie pas nécessairement que les événements ont été envoyés avec succès aux instances de service Event Notifications correspondantes.

Les notifications d'événements intégrées des chaînes d'outils et des instances d'intégration d'outils contiennent uniquement des propriétés de métadonnées, telles que des noms ou des identificateurs de ressources. Les données sensibles, telles que les clés API ou les mots de passe, ne sont pas incluses dans les événements générés.

Les notifications d'événements personnalisées du client contiennent les données fournies par le client à l'API POST {toolchain_id} /toolchains//events. N'incluez pas de données d'identification, d'informations d'identification personnelle ou d'autres informations sensibles dans les appels à l'API.

Les propriétés envoyées à Event Notifications varient en fonction du type d'événement. Par exemple, si un événement com.ibm.cloud.toolchain.pipeline:pipeline_start:1 a lieu, la chaîne d'outils envoie un contenu de notification à Event Notifications qui est similaire à l'exemple suivant.

{
   "subject": {
      "name": "<user>",
      "email": "<user_email>",
      "iam_id": "<iam_id>"
   },
   "toolchain.instance": {
      "crn": "crn:v1:bluemix:public:toolchain:<region>:a/<account_id>:<toolchain_id>::",
      "href": "https://api.<region>.devops.cloud.ibm.com/toolchain/v2/toolchains/<toolchain_id>",
      "id": "357d4432-964a-46ae-83d4-df91eb539d1a",
      "name": "EventNotifications-toolchain",
      "resource_group_id": "<resource_group_id>",
      "ui_href": "https://cloud.ibm.com/devops/toolchains/<toolchain_id>?env_id=ibm:yp:us-south"
   },
   "toolchain.tool-instance": {
      "href": "https://api.<region>.devops.cloud.ibm.com/toolchain/v2/toolchains/<toolchain_id>/tools/<tool_id>",
      "id": "<tool_id>",
      "name": "ci-pipeline",
      "tool_type_id": "pipeline",
      "referent": {
         "ui_href": "https://cloud.ibm.com/devops/pipelines/<tool_id>?env_id=ibm:yp:us-south"
      }
   },
   "toolchain.pipeline-run": {
      "id": "<run_id>",
      "run_number": 11,
      "start_time": "2023-04-17T16:48:36.928Z",
      "ui_href": "https://cloud.ibm.com/devops/pipelines/<tool_id>/<stage_id>/<run_id>?env_id=<region_id>",
      "trigger": {
         "href": "https://api.<region>.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<tool_id>/triggers/<trigger_id>",
         "id": "<trigger_id>",
         "name": "my-trigger",
         "type": "manual"
      }
   }
}

Le tableau suivant fournit des informations détaillées sur chaque propriété de notification d'événements.

Propriétés d'une notification d'événement
Propriété Description
subject Optionnel. Objet représentant le sujet à l'origine de l'événement. Cet objet peut contenir les zones suivantes:

name: Nom du sujet.

email: Le courrier électronique de l'objet.

iam_id: ID IAM du sujet.

toolchain.instance Objet qui représente la chaîne d'outils d'où provient l'événement. Cet objet contient les zones suivantes:

crn: CRN de la chaîne d'outils.

id: ID de la chaîne d'outils.

resource_group_id: ID du groupe de ressources de la chaîne d'outils.

name: Nom de la chaîne d'outils.

href: Noeud final d'API public pour la chaîne d'outils.

ui_href: Noeud final d'interface utilisateur de la chaîne d'outils.

toolchain.tool-instance Optionnel. Objet qui représente l'instance de chaîne d'outils qui participe à l'événement. Cet objet est présent et applicable uniquement aux événements spécifiques à un outil ou à une intégration d'outils. Pour les sous-types toolchain_bind et toolchain_unbind, cet objet est l'instance d'intégration d'outils qui est liée ou non liée. Pour les événements de pipeline, cet objet est l'instance d'intégration d'outil de pipeline d'où provient l'événement. Cet objet contient les zones suivantes:

id: ID de l'instance d'intégration d'outils.

tool_type_id: ID du type d'outil.

href: Noeud final d'API public pour l'instance d'intégration d'outils.

state: Etat de l'instance d'intégration d'outils.

referent: Objet contenant des informations sur l'outil représenté par l'instance d'intégration d'outils. Par exemple, ui_href qui est le noeud final de l'interface utilisateur pour l'intégration d'outils représentée par l'instance d'intégration d'outils.

name: Optionnel. Nom de l'instance d'intégration d'outils.

toolchain.pipeline-run Optionnel. Objet qui représente l'exécution du pipeline Tekton ou l'exécution de l'étape de pipeline classique d'où provient l'événement. Cet objet est présent et applicable uniquement aux événements de pipeline et contient les zones suivantes:

id: ID de l'exécution de pipeline Tekton ou de l'étape de pipeline Classic.

ui_href: Noeud final d'interface utilisateur de l'exécution de pipeline Tekton ou de l'étape de pipeline Classic.

run_number: Optionnel. Numéro d'exécution de l'exécution de pipeline Tekton ou de l'étape de pipeline Classic.

start_time: Optionnel. Heure de début de l'exécution, au format ISO 8601.

finish_time: Optionnel. Heure de fin de l'exécution, au format ISO 8601.

duration: Optionnel. Durée de l'exécution, au format ISO 8601.

trigger: Optionnel. Objet contenant des informations sur le déclencheur qui a exécuté le pipeline Tekton. Par exemple, name, qui est le nom du déclencheur de pipeline Tekton.

toolchain.external-event Optionnel. Objet contenant les détails d'un événement client sur mesure résultant de l'appel de l'API POST /toolchains/{toolchain_id}/events. Cet objet est présent et applicable uniquement aux événements client sur mesure. Cet objet contient les zones suivantes:

id: ID de l'événement client sur mesure généré par l'API POST /toolchains/{toolchain_id}/events.

title: Valeur de la zone title dans le contenu de la demande à l'API POST /toolchains/{toolchain_id}/events.

description: Valeur de la zone description dans le contenu de la demande à l'API POST /toolchains/{toolchain_id}/events.

data: Optionnel. La présence et la valeur de cette zone dépendent du contenu de la demande soumise à l'API POST /toolchains/{toolchain_id}/events. Si la demande adressée à l'API spécifie un content_type de text/plain, le champ data contient la valeur du champ data.text_plain.content de la charge utile de la demande, qui contient la chaîne de données. Si la demande à l'API spécifie un content_type de application/json, le champ data est présent avec la valeur du champ data.application_json.content de la charge utile de la demande, qui contient les données JSON. Notez que les données JSON sont limitées à une profondeur maximale de 5. Si la demande à l'API spécifie un content_type de none, la zone data est omise.