Abilitazione delle notifiche eventi per le toolchain

DevOps Insights Il servizio giungerà al termine e verrà interrotto il 31 agosto 2026. Il servizio " Continuous Delivery " verrà interrotto nelle seguenti regioni il 12 febbraio 2027: au-syd, ca-tor, us-east. A partire da tale data, anche Code Risk Analyzer verrà ritirato dal mercato in tutte le regioni. Se in una regione non si riscontra un utilizzo attivo di queste funzionalità, queste potrebbero essere dismesse in anticipo e non accettare più nuove istanze. Per saperne di più

In qualità di amministratore di IBM Cloud® Continuous Delivery toolchain, potresti voler inviare notifiche relative a eventi in una toolchain o a un'integrazione di strumenti ad altri utenti o destinatari umani, utilizzando e-mail, SMS, Slack o altri canali di consegna PagerDuty, supportati. Inoltre, potresti voler inviare queste notifiche di eventi ad altre applicazioni per creare la logica utilizzando la programmazione basata sugli eventi utilizzando, ad esempio, i webhook. Questo approccio è reso possibile dall'integrazione tra toolchain e IBM Cloud® Event Notifications.

Per inviare informazioni a Event Notifications, devi aggiungere un'integrazione dello strumento Event Notifications alla tua toolchain. Per ulteriori informazioni sull'utilizzo di Event Notifications, vedi Introduzione a Event Notifications.

È ora possibile distribuire le notifiche degli eventi utilizzando lo strumento di integrazione Event NotificationsEvent Notifications è il metodo preferito per distribuire notifiche a Slack e ad altri canali di comunicazione come PagerDuty, e-mail, SMS, notifiche push, webhook, Microsoft® Teams, ServiceNow, e IBM Cloud Functions.

Come vengono raccolti e inviati gli eventi dalle toolchain

Quando si verifica un evento di interesse in una toolchain o in una delle integrazioni dello strumento supportate, la toolchain comunica con un'istanza Event Notifications connessa per inoltrare una notifica a una destinazione supportata.

Le toolchain supportano due tipi di eventi:

  • Gli eventi integrati vengono generati automaticamente all'interno di una toolchain. Ad esempio, gli eventi integrati vengono inviati quando le integrazioni dello strumento vengono aggiunte o rimosse da una toolchain, quando le esecuzioni della pipeline vengono avviate e quando le esecuzioni della pipeline terminano. Il payload di un evento integrato consiste di dati determinati dalla toolchain.
  • Gli eventi su misura del client vengono generati da una toolchain su richiesta di un client utilizzando l'API POST /toolchains/{toolchain_id}/events. Il payload di un evento personalizzato del client è costituito dai dati determinati dalla toolchain e dai dati forniti all'API dal client.

I passaggi della pipeline Tekton possono sfruttare l'API POST {toolchain_id} /toolchains//events personalizzata dal cliente per inviare eventi personalizzati a Event Notifications destinazioni che trasportano informazioni rilevanti e significative per i passaggi.

Eventi per Continuous Delivery

La tabella seguente elenca gli eventi relativi alla toolchain.

I caratteri :1 accodati a ciascun sottotipo rappresentano i numeri di versione principali.

Azioni che generano notifiche di eventi
Nome evento Tipo di evento Tipo secondario Descrizione
Client event com.ibm.cloud.toolchain.client event:1 Questo evento su misura del client viene inviato quando un client richiama l'API POST /toolchains/{toolchain_id}/events.
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 Questo evento integrato viene inviato quando un'integrazione dello strumento viene creata e aggiunta ad una toolchain.
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 Questo evento integrato viene inviato quando un'integrazione dello strumento viene eliminata e rimossa da una toolchain.
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 Questo evento integrato viene inviato quando viene avviata un'esecuzione della pipeline Tekton o una fase della pipeline Classic.
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 Questo evento integrato viene inviato quando un'esecuzione della pipeline Tekton o una fase della pipeline Classic vengono completate correttamente.
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 Questo evento integrato viene inviato quando una esecuzione della pipeline Tekton o una fase della pipeline Classic viene completata con uno stato di malfunzionamento. Ad esempio, questo evento viene inviato quando si tenta una distribuzione, ma non viene completato correttamente.
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 Questo evento integrato viene inviato quando viene annullata un'esecuzione della pipeline Tekton o una fase della pipeline Classic.
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 Questo evento integrato viene inviato quando un'esecuzione della pipeline Tekton rileva un errore e probabilmente non è stata completata correttamente. Questo evento viene utilizzato principalmente per problemi di infrastruttura e di configurazione, ad esempio quando Tekton in formato non corretto impedisce l'avvio dell'esecuzione della pipeline.

Abilitazione delle notifiche

Gli eventi integrati e personalizzati del client generati da una toolchain o da un'integrazione dello strumento associato possono essere inoltrati a un'istanza del servizio Event Notifications disponibile nello stesso account.

Assicurarsi che l'istanza di servizio Event Notifications selezionata disponga di una politica di autorizzazione IAM che consenta alla toolchain di inviare eventi a tale istanza di servizio. Per ulteriori informazioni sulla concessione dell'autorizzazione con l'istanza Event Notifications di servizio, vedere Perché mi viene negato il permesso di integrare Event Notifications un'istanza?

Connessione a Event Notifications nella console

Configura Event Notifications per inviare eventi critici dalle toolchain e dalle istanze di integrazione dello strumento:

  1. Se disponi già di una toolchain e desideri integrarvi questo strumento, dalla console IBM Cloud, fai clic sull'icona del menu ( icona a forma di hamburger ) > Automazione della piattaforma > Toolchain. Nella pagina Toolchains, fai clic sulla toolchain per aprirne la pagina di panoramica.

    a. Fai clic su Add tool.

    b. Nella sezione Integrazioni strumento, fai clic su Event Notifications.

  2. Digita il nome che desideri visualizzare per questa integrazione dello strumento nella scheda " Event Notifications " della tua catena di strumenti. Questo nome viene utilizzato per identificare l'integrazione dello strumento nella tua toolchain.

  3. Seleziona l'istanza Event Notifications a cui connettere la toolchain.

  4. Fai clic su " Crea integrazione " per aggiungere l'integrazione con lo strumento Event Notifications alla tua catena di strumenti.

  5. Nella pagina Panoramica della tua toolchain, nella scheda IBM Cloud tools, fai clic su Event Notifications.

Connessione a Event Notifications con l'API

Puoi aggiungere l'integrazione dello strumento Event Notifications alla tua toolchain utilizzando l'API.

  1. Ottieni un token di connessione IAM. In alternativa, se stai utilizzando un SDK, ottieni una chiave API IAM e imposta le opzioni client utilizzando le variabili di ambiente.

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. Cerca l'ID della toolchain in cui vuoi creare la tua integrazione dello strumento.

  3. Specificare eventnotifications come tool_type_id.

  4. Specifica i seguenti tool_parameters richiesti dall'integrazione dello strumento:

    • name: il nome utilizzato per identificare l'integrazione dello strumento Event Notifications.
    • instance-crn: il CRN (Cloud Resource Name) dell'istanza del servizio Event Notifications.
  5. Aggiungi l'integrazione dello strumento nella toolchain di destinazione.

    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();
    

La seguente tabella elenca e descrive ciascuna delle variabili utilizzate nei passi precedenti.

Variabili per il provisioning dell'integrazione dello strumento con l'API
Variabile Descrizione
{base_url} L'endpoint dell'API URL Toolchain. Per ulteriori informazioni sui valori supportati, vedere Endpoint URL.
{iam_api_key} La chiave API IAM.
{iam_token} Un token bearer IAM valido.
{tool_name} Il nome dell'integrazione dello strumento.
{event_notifications_tool_integration_name} Il nome dell'istanza del servizio " Event Notifications ".
{event_notifications_service_crn} Il CRN (Cloud Resource Name) dell'istanza del servizio Event Notifications.
{toolchain_id} La toolchain in cui creare l'integrazione dello strumento.

Aggiunta di un'integrazione dello strumento con Terraform

Puoi aggiungere l'integrazione dello strumento Event Notifications alla tua toolchain utilizzando Terraform.

IBM Cloud Per aggiungere un'integrazione di strumenti utilizzando Terraform è necessaria la versione Terraform 1.53.0 provider o successive.

  1. Per installare la CLI (command - line interface) Terraform e configurare il plug-in del fornitore IBM Cloud per Terraform, segui l'esercitazione per Introduzione a Terraform su IBM Cloud®.

  2. Crea un file di configurazione Terraform denominato “ main.tf ”. In questo file, aggiungere la configurazione per creare le istanze di risorsa utilizzando l'HCL (Configuration Language) HashiCorp. Per ulteriori informazioni sull'utilizzo di questa lingua di configurazione, consultare la documentazione Terraform.

    Il seguente esempio crea un'integrazione dello strumento Delivery Pipeline utilizzando la risorsa ibm_cd_toolchain_tool_pipeline, dove toolchain_id è un GUID che rappresenta la toolchain in cui creare l'integrazione dello strumento.

    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}"
      }
    }
    

    Per ulteriori informazioni sulle risorse di integrazione dello strumento, vedi l'elenco completo delle risorse di integrazione dello strumento supportate in IBM Cloud Terraform Registry.

  3. Inizializza la CLI Terraform.

    terraform init
    
  4. Creare un piano di esecuzione Terraform. Questo piano riepiloga le azioni che devono essere eseguite per creare l'integrazione dello strumento.

    terraform plan
    
  5. Applicare il piano di esecuzione di Terraform. Terraform intraprende le azioni richieste per creare l'integrazione dello strumento.

    terraform apply
    

La seguente tabella elenca e descrive ciascuna delle variabili utilizzate nei passi precedenti.

Variabili per il provisioning dell'integrazione dello strumento con l'API
Variabile Descrizione
{event_notifications_tool_integration_name} Il nome dell'istanza del servizio " Event Notifications ".
{event_notifications_service_crn} Il CRN del servizio Event Notifications.
{toolchain_id} La toolchain in cui creare l'integrazione dello strumento.

Consegna di notifiche a destinazioni selezionate

Dopo aver abilitato le notifiche di eventi per una toolchain, crea argomenti, destinazioni e sottoscrizioni in Event Notifications in modo che gli avvisi possano essere inoltrati e consegnati alle destinazioni selezionate.

Per un elenco completo delle destinazioni supportate, consultare la Event Notifications documentazione.

Dettagli payload di notifica

Gli eventi generati dalle toolchain e le relative istanze di integrazione dello strumento associate contengono vari campi che ti aiutano a identificare l'origine e i dettagli di un evento.

L'API POST {toolchain_id} /toolchains//events restituirà un codice di stato 200 per indicare che la richiesta è stata elaborata. Ciò non significa necessariamente che gli eventi siano stati inviati correttamente alle istanze di servizio Event Notifications corrispondenti.

Le notifiche di eventi integrate dalle toolchain e dalle istanze di integrazione dello strumento contengono solo proprietà di metadati, come nomi o identificatori di risorse. I dati sensibili, come le chiavi API o le password, non vengono inclusi negli eventi generati.

Le notifiche degli eventi personalizzate dal cliente contengono i dati forniti dal cliente all'API POST {toolchain_id} /toolchains//events. Non includere credenziali, informazioni di identificazione personali o altre informazioni sensibili nelle chiamate all'API.

Le proprietà inviate a Event Notifications variano a seconda del tipo di evento. Ad esempio, se si verifica un evento com.ibm.cloud.toolchain.pipeline:pipeline_start:1, la toolchain invia un payload di notifica a Event Notifications che è simile al seguente esempio.

{
   "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"
      }
   }
}

La seguente tabella fornisce informazioni dettagliate su ciascuna proprietà di notifica eventi.

Proprietà nel payload di una notifica di evento
Proprietà Descrizione
subject Facoltativo. L'oggetto che rappresenta il soggetto che ha avviato l'evento. Questo oggetto potrebbe contenere i seguenti campi:

name: il nome dell'oggetto.

email: L'email dell'oggetto.

iam_id: L'ID IAM dell'oggetto.

toolchain.instance L'oggetto che rappresenta la toolchain in cui ha avuto origine l'evento. Questo oggetto contiene i seguenti campi:

crn: il CRN della toolchain.

id: L'ID della toolchain.

resource_group_id: L'ID del gruppo di risorse della toolchain.

name: Il nome della toolchain

href: L'endpoint API pubblico per la toolchain.

ui_href: L'endpoint IU per la toolchain.

toolchain.tool-instance Facoltativo. L'oggetto che rappresenta l'istanza della toolchain che partecipa all'evento. Questo oggetto è presente e applicabile solo agli eventi specifici di un'integrazione di strumenti o strumenti. Per i sottotipi toolchain_bind e toolchain_unbind, questo oggetto è l'istanza di integrazione dello strumento di cui viene eseguito il bind o l'annullamento del bind. Per gli eventi pipeline, questo oggetto è l'istanza di integrazione dello strumento pipeline in cui ha avuto origine l'evento. Questo oggetto contiene i campi riportati di seguito:

id: l'ID dell'istanza di integrazione dello strumento.

tool_type_id: L'ID del tipo di strumento .

href: L'endpoint API pubblico per l'istanza di integrazione dello strumento.

state: Lo stato dell'istanza di integrazione dello strumento.

referent: Un oggetto che contiene informazioni sullo strumento rappresentato dall'istanza di integrazione dello strumento. Ad esempio, ui_href che è l'endpoint IU per l'integrazione dello strumento rappresentato dall'istanza di integrazione strumento.

name: Facoltativo. Il nome dell'istanza di integrazione dello strumento.

toolchain.pipeline-run Facoltativo. L'oggetto che rappresenta l'esecuzione della pipeline Tekton o la fase della pipeline Classic in cui ha avuto origine l'evento. Questo oggetto è presente e applicabile solo agli eventi della pipeline e contiene i seguenti campi:

id: l'ID dell'esecuzione della pipeline Tekton o della fase della pipeline classica.

ui_href: L'endpoint IU della fase di esecuzione della pipeline Tekton o Classic.

run_number: Facoltativo. Il numero di esecuzione dell'esecuzione della pipeline Tekton o della fase della pipeline Classic.

start_time: Facoltativo. L'ora in cui è stata avviata l'esecuzione, in formato ISO 8601

finish_time: Facoltativo. L'ora in cui è terminata l'esecuzione, in formato ISO 8601.

duration: Facoltativo. La durata dell'esecuzione, in formato ISO 8601.

trigger: Facoltativo. Un oggetto che contiene informazioni sul trigger che ha eseguito la pipeline Tekton. Ad esempio, name, che è il nome del trigger della pipeline Tekton.

toolchain.external-event Facoltativo. L'oggetto che contiene i dettagli di un evento personalizzato del client risultante dal richiamo dell'API POST /toolchains/{toolchain_id}/events. Questo oggetto è presente e applicabile solo agli eventi su misura del client. Questo oggetto contiene i seguenti campi:

id: L'ID dell'evento personalizzato del client prodotto dall'API POST /toolchains/{toolchain_id}/events.

title: Il valore del campo title nel payload della richiesta all'API POST /toolchains/{toolchain_id}/events.

description: Il valore del campo description nel payload della richiesta all'API POST /toolchains/{toolchain_id}/events.

data: Facoltativo. La presenza e il valore di questo campo dipendono dal payload della richiesta inoltrato all'API POST /toolchains/{toolchain_id}/events. Se la richiesta all'API specifica un content_type di text/plain, il campo data è presente con il valore del campo data.text_plain.content del payload della richiesta, contenente i dati della stringa. Se la richiesta all'API specifica un content_type di application/json, il campo data è presente con il valore del campo data.application_json.content del payload della richiesta, contenente i dati JSON. Si noti che i dati JSON sono vincolati a una profondità massima di 5. Se la richiesta all'API specifica un content_type di none, il campo data viene omesso.