IBM Cloud Docs
Abilitazione delle notifiche eventi per le toolchain

Abilitazione delle notifiche eventi per le toolchain

Come amministratore di IBM Cloud® Continuous Delivery catene di strumenti, potreste voler inviare notifiche di eventi in una catena di strumenti o in un'integrazione di strumenti ad altri utenti o a destinazioni umane, utilizzando e-mail, SMS, Slack, PagerDuty, o altri canali di consegna 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 le 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 notifiche di eventi utilizzando l'integrazione dello strumento Event Notifications. Event 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 passi della pipeline Tekton possono sfruttare l'API POST /toolchains/{toolchain_id}/events personalizzata del client per inviare eventi personalizzati a destinazioni Event Notifications che contengono informazioni rilevanti e significative per i passi.

Eventi per Continuous Delivery

La tabella seguente elenca gli eventi della catena degli strumenti.

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.

Assicurati che l'istanza del servizio Event Notifications selezionata abbia una politica di autorizzazione IAM che consente alla toolchain di inviare eventi a questa istanza del servizio. Per ulteriori informazioni sulla concessione dell'autorizzazione con l'istanza del servizio Event Notifications, vedi Perché mi viene negata l'autorizzazione per integrare un'istanza Event Notifications ?.

Connessione a Event Notifications nella console

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

  1. Se si dispone di una catena di strumenti e vi si aggiunge l'integrazione di questo strumento, dalla console IBM Cloud, fare clic sull'icona Menu > Automazione piattaforma > Catene di strumenti. Nella pagina Toolchains, fai clic sulla toolchain per aprirne la pagina di panoramica. In alternativa, nella pagina della panoramica della tua applicazione, nella scheda di fornitura continua, fai clic su View toolchain. Fai quindi clic su Overview.

    a. Fai clic su Add tool.

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

  2. Digitare il nome che si desidera visualizzare per questa integrazione di strumenti nella scheda Event Notifications della propria toolchain. 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. Fare clic su Crea integrazione per aggiungere l'integrazione dello strumento Event Notifications alla propria toolchain.

  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'URL dell'endpoint API toolchain. Per ulteriori informazioni sui valori supportati, vedi URL endpoint.
{iam_api_key} La chiave API IAM.
{iam_token} Un token portatore 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 È richiesta la versione del provider Terraform 1.53.0 o successiva per aggiungere un'integrazione dello strumento utilizzando Terraform.

  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. Creare un file di configurazione di Terraform chiamato '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, vedi la documentazione diEvent Notifications.

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 /toolchains/{toolchain_id}/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 corrispondenti istanze del servizio Event Notifications.

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 di eventi su misura del client contengono i dati forniti dal client all'API POST /toolchains/{toolchain_id}/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.