Activación de notificaciones de eventos para cadenas de herramientas

Continuous Delivery Se dejará de ofrecer en las siguientes regiones el 12 de febrero de 2027: au-syd, ca-tor, us-east. Code Risk Analyzer también dejará de estar disponible en todas las regiones a partir de esa fecha. Si en una región no se hace uso activo de estas funciones, es posible que dichas funciones se dejen de ofrecer antes de lo previsto en esa región y dejen de aceptar nuevas instancias. Más información

Como administrador de IBM Cloud® Continuous Delivery cadenas de herramientas, es posible que desee enviar notificaciones de eventos en una cadena de herramientas o una integración de herramientas a otros usuarios, o destinos humanos, mediante correo electrónico, SMS, Slack u PagerDuty, otros canales de entrega compatibles. Además, es posible que desee enviar estas notificaciones de eventos a otras aplicaciones para crear lógica mediante programación basada en eventos, utilizando, por ejemplo, webhooks. Este enfoque es posible gracias a la integración entre las cadenas de herramientas y IBM Cloud® Event Notifications.

Para enviar información a Event Notifications, debe añadir una integración de herramientas de Event Notifications a la cadena de herramientas. Para obtener más información sobre cómo trabajar con Event Notifications, consulte Iniciación a Event Notifications.

Ahora puede distribuir notificaciones de eventos mediante la integración de la herramienta Event NotificationsEvent Notifications es el método preferido para distribuir notificaciones a Slack y otros canales de comunicación como PagerDuty, correo electrónico, SMS, notificaciones push, webhook, Microsoft® Teams, ServiceNow, y IBM Cloud Functions.

Cómo se recogen y envían los eventos mediante las cadenas de herramientas

Cuando un suceso de interés tiene lugar en una cadena de herramientas o en una de las integraciones de herramientas soportadas, la cadena de herramientas se comunica con una instancia de Event Notifications conectada para reenviar una notificación a un destino soportado.

Las cadenas de herramientas dan soporte a dos tipos de sucesos:

  • Los sucesos incorporados se generan automáticamente dentro de una cadena de herramientas. Por ejemplo, los sucesos incorporados se envían cuando se añaden o eliminan integraciones de herramientas de una cadena de herramientas, cuando se inician las ejecuciones de conducto y cuando finalizan las ejecuciones de conducto. La carga útil de un suceso incorporado consta de datos determinados por la cadena de herramientas.
  • Los sucesos a medida del cliente los genera una cadena de herramientas a petición de un cliente utilizando la API POST /toolchains/{toolchain_id}/events. La carga útil de un suceso de cliente a medida consta de datos determinados por la cadena de herramientas y datos proporcionados a la API por el cliente.

Los pasos de la canalización de Tekton pueden aprovechar la API POST {toolchain_id} /toolchains//events personalizada del cliente para enviar eventos personalizados a Event Notifications destinos que transportan información relevante y significativa para los pasos.

Sucesos de Continuous Delivery

En la siguiente tabla se enumeran los eventos de la cadena de herramientas.

Los caracteres :1 que se añaden a cada subtipo representan números de versión principales.

Acciones que generan notificaciones de eventos
Nombre del suceso Tipo de suceso Subtipo Descripción
Client event com.ibm.cloud.toolchain.client event:1 Este suceso de cliente a medida se envía cuando un cliente invoca la API POST /toolchains/{toolchain_id}/events.
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 Este suceso incorporado se envía cuando se crea una integración de herramientas y se añade a una cadena de herramientas.
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 Este suceso incorporado se envía cuando se suprime una integración de herramientas y se elimina de una cadena de herramientas.
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 Este suceso incorporado se envía cuando se inicia una ejecución de conducto de Tekton o una etapa de conducto clásico.
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 Este suceso incorporado se envía cuando una ejecución de conducto de Tekton o una etapa de conducto clásico se completa correctamente.
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 Este suceso incorporado se envía cuando una ejecución de conducto de Tekton o una etapa de conducto clásico se completa con un estado de anomalía. Por ejemplo, este suceso se envía cuando se intenta un despliegue, pero no se puede completar correctamente.
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 Este suceso incorporado se envía cuando se cancela una ejecución de conducto de Tekton o una etapa de conducto clásico.
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 Este suceso incorporado se envía cuando una ejecución de conducto de Tekton encuentra un error y probablemente no se ha completado correctamente. Este suceso se utiliza principalmente para problemas de infraestructura y configuración, como por ejemplo cuando Tekton mal formado impide que se inicie la ejecución de la interconexión.

Habilitar notificaciones

Los sucesos personalizados incorporados y de cliente generados por una cadena de herramientas o una integración de herramientas asociada se pueden reenviar a una instancia de servicio de Event Notifications que está disponible en la misma cuenta.

Asegúrese de que la instancia de servicio Event Notifications seleccionada tenga una política de autorización de IAM que permita a la cadena de herramientas enviar eventos a esta instancia de servicio. Para obtener más información sobre cómo conceder autorización con la instancia Event Notifications de servicio, consulte ¿Por qué se me deniega el permiso para integrar una Event Notifications instancia?

Conexión a Event Notifications en la consola

Configure Event Notifications para enviar sucesos críticos desde cadenas de herramientas e instancias de integración de herramientas:

  1. Si dispone de una cadena de herramientas y desea añadirle esta integración, desde la consola de IBM Cloud, haga clic en el icono de menú (icono de hamburguesa ) > Automatización de la plataforma > Cadenas de herramientas. En la página Cadenas de herramientas, pulse la cadena de herramientas para abrir su página Visión general.

    a. Pulse Añadir herramienta.

    b. En la sección Integraciones de herramientas, pulse Event Notifications.

  2. Escriba el nombre que desea visualizar para esta integración de herramientas en la tarjeta Event Notifications de la cadena de herramientas. Este nombre se utiliza para identificar la integración de herramientas en la cadena de herramientas.

  3. Seleccione la instancia de Event Notifications a la que conectar la cadena de herramientas.

  4. Haz clic en Crear integración para añadir la integración de la herramienta Event Notifications a tu cadena de herramientas.

  5. En la página de Resumen de su Toolchain, en la tarjeta de herramientas IBM Cloud, haga clic en Event Notifications.

Conectar a Event Notifications con la API

Puede añadir la integración de herramientas de Event Notifications a la cadena de herramientas utilizando la API.

  1. Obtener una señal portadora de IAM. De forma alternativa, si utiliza un SDK, obtenga una clave de API de IAM y establezca las opciones de cliente utilizando variables de entorno.

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. Busque el ID de la cadena de herramientas en la que desea crear la integración de herramientas.

  3. Especifique eventnotifications como tool_type_id.

  4. Especifique los siguientes tool_parameters que son necesarios para la integración de herramientas:

    • name: el nombre que se utiliza para identificar la integración de herramientas de Event Notifications.
    • instance-crn: el nombre de recurso de nube (CRN) de la instancia de servicio de Event Notifications.
  5. Añadir la integración de la herramienta dentro de la cadena de herramientas prevista.

    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 tabla siguiente lista y describe cada una de las variables que se utilizan en los pasos anteriores.

Variables para el aprovisionamiento de la herramienta de integración con la API
Variable Descripción
{base_url} El punto final de la API de la URL cadena de herramientas. Para obtener más información sobre los valores compatibles, consulte Endpoint URL.
{iam_api_key} Su clave de API IAM.
{iam_token} Un token de portador de IAM válido.
{tool_name} El nombre de la integración de herramientas.
{event_notifications_tool_integration_name} El nombre de la instancia del servicio Event Notifications.
{event_notifications_service_crn} El nombre de recurso en la nube (CRN) de la instancia del servicio Event Notifications.
{toolchain_id} La cadena de herramientas en la que se crea la integración de herramientas.

Adición de una integración de herramientas con Terraform

Puede añadir la integración de herramientas de Event Notifications a la cadena de herramientas utilizando Terraform.

IBM Cloud Se requiere la versión Terraform 1.53.0 provider o posterior para añadir una integración de herramientas mediante Terraform.

  1. Para instalar la interfaz comando línea de comandos (CLI) de Terraform y configurar el complemento del proveedor de IBM Cloud para Terraform, sigue el tutorial Primeros pasos con Terraform en IBM Cloud®.

  2. Cree un archivo de configuración de Terraform denominado main.tf. En este archivo, añade la configuración para crear instancias de recursos utilizando el lenguaje de configuración de HashiCorp (HCL). Para obtener más información sobre cómo utilizar este idioma de configuración, consulte la documentación de Terraform.

    El ejemplo siguiente crea una integración de herramientas de Delivery Pipeline utilizando el recurso ibm_cd_toolchain_tool_pipeline, donde toolchain_id es un GUID que representa la cadena de herramientas en la que crear la integración de herramientas.

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

    Para obtener más información sobre los recursos de integración de herramientas, consulte la lista completa de recursos de integración de herramientas soportados en IBM Cloud Terraform Registry.

  3. Inicialice la CLI de Terraform.

    terraform init
    
  4. Cree un plan de ejecución de Terraform. Este plan resume las acciones que deben ejecutarse para crear la integración de herramientas.

    terraform plan
    
  5. Aplica el plan de ejecución de Terraform. Terraform realiza las acciones necesarias para crear la integración de herramientas.

    terraform apply
    

La tabla siguiente lista y describe cada una de las variables que se utilizan en los pasos anteriores.

Variables para el aprovisionamiento de la herramienta de integración con la API
Variable Descripción
{event_notifications_tool_integration_name} El nombre de la instancia del servicio Event Notifications.
{event_notifications_service_crn} El CRN de la instancia de servicio de Event Notifications.
{toolchain_id} La cadena de herramientas en la que se crea la integración de herramientas.

Entregar notificaciones a destinos seleccionados

Después de habilitar las notificaciones de sucesos para una cadena de herramientas, cree temas, destinos y suscripciones en Event Notifications para que las alertas se puedan reenviar y entregar a los destinos seleccionados.

Para obtener una lista completa de destinos soportados, consulte la Documentación de Event Notifications.

Detalles de carga útil de notificación

Los sucesos generados por cadenas de herramientas y sus instancias de integración de herramientas asociadas contienen varios campos que le ayudan a identificar el origen y los detalles de un suceso.

La API POST {toolchain_id} /toolchains//events devolverá un código de estado 200 para indicar que la solicitud se ha procesado. Esto no significa necesariamente que los eventos se hayan enviado correctamente a las instancias de servicio Event Notifications correspondientes.

Las notificaciones de sucesos incorporadas de cadenas de herramientas e instancias de integración de herramientas sólo contienen propiedades de metadatos, como nombres o identificadores de recursos. Los datos confidenciales, como las claves API o las contraseñas, no se incluyen en los eventos generados.

Las notificaciones de eventos personalizadas del cliente contienen los datos proporcionados por el cliente a la API POST {toolchain_id} /toolchains//events. No incluya credenciales, información de identificación personal u otra información confidencial en las llamadas a la API.

Las propiedades que se envían a Event Notifications varían en función del tipo de evento. Por ejemplo, si se produce un suceso com.ibm.cloud.toolchain.pipeline:pipeline_start:1, la cadena de herramientas envía una carga útil de notificación a Event Notifications que es similar al ejemplo siguiente.

{
   "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 tabla siguiente proporciona información detallada sobre cada propiedad de notificación de sucesos.

Propiedades de la carga útil de una notificación de suceso
Propiedad Descripción
subject Opcional. El objeto que representa el asunto que ha iniciado el suceso. Este objeto puede contener los campos siguientes:

name: El nombre del asunto.

email: El correo electrónico del asunto.

iam_id: El ID de IAM del asunto.

toolchain.instance El objeto que representa la cadena de herramientas donde se ha originado el suceso. Este objeto contiene los campos siguientes:

crn: CRN de la cadena de herramientas.

id: El ID de la cadena de herramientas.

resource_group_id: El ID del grupo de recursos de la cadena de herramientas.

name: El nombre de la cadena de herramientas.

href: El punto final de API pública para la cadena de herramientas.

ui_href: El punto final de la interfaz de usuario para la cadena de herramientas.

toolchain.tool-instance Opcional. El objeto que representa la instancia de cadena de herramientas que participa en el suceso. Este objeto está presente y sólo es aplicable a los sucesos que son específicos de una herramienta o integración de herramientas. Para los subtipos toolchain_bind y toolchain_unbind, este objeto es la instancia de integración de herramientas que se está enlazando o desenlazando. Para los sucesos de interconexión, este objeto es la instancia de integración de la herramienta de interconexión donde se ha originado el suceso. Este objeto contiene los campos siguientes:

id: El ID de la instancia de integración de herramientas.

tool_type_id: El ID del tipo de herramienta .

href: El punto final de la API pública para la instancia de integración de herramientas.

state: El estado de la instancia de integración de herramientas.

referent: Objeto que contiene información sobre la herramienta representada por la instancia de integración de herramientas. Por ejemplo, ui_href, que es el punto final de la interfaz de usuario para la integración de herramientas representada por la instancia de integración de herramientas.

name: Opcional. El nombre de la instancia de integración de herramientas.

toolchain.pipeline-run Opcional. El objeto que representa la ejecución de conducto de Tekton o la ejecución de etapa de conducto clásico donde se ha originado el suceso. Este objeto sólo está presente y es aplicable a sucesos de interconexión, y contiene los campos siguientes:

id: El ID de la ejecución de interconexión de Tekton o la etapa de interconexión clásica.

ui_href: El punto final de interfaz de usuario de la ejecución de conducto de Tekton o la etapa de conducto clásico.

run_number: Opcional. El número de ejecución de la ejecución del conducto Tekton o la etapa Conducto clásico.

start_time: Opcional. La hora a la que se inició la ejecución, en formato ISO 8601.

finish_time: Opcional. La hora a la que ha finalizado la ejecución, en formato ISO 8601.

duration: Opcional. La duración de la ejecución, en formato ISO 8601.

trigger: Opcional. Objeto que contiene información sobre el desencadenante que ha ejecutado la interconexión de Tekton. Por ejemplo, name, que es el nombre del desencadenante de interconexión de Tekton.

toolchain.external-event Opcional. El objeto que contiene los detalles de un suceso de cliente a medida resultante de la invocación de la API POST /toolchains/{toolchain_id}/events. Este objeto está presente y sólo es aplicable a los sucesos a medida del cliente. Este objeto contiene los campos siguientes:

id: El ID del suceso de cliente a medida producido por la API POST /toolchains/{toolchain_id}/events.

title: El valor del campo title en la carga útil de solicitud para la API POST /toolchains/{toolchain_id}/events.

description: El valor del campo description en la carga útil de solicitud para la API POST /toolchains/{toolchain_id}/events.

data: Opcional. La presencia y el valor de este campo dependen de la carga útil de solicitud enviada a la API POST /toolchains/{toolchain_id}/events. Si la solicitud a la API especifica un content_type de text/plain, entonces el campo data está presente con el valor del campo data.text_plain.content de la carga útil de la solicitud, que contiene los datos de cadena. Si la solicitud a la API especifica un content_type de application/json, entonces el campo data está presente con el valor del campo data.application_json.content de la carga útil de la solicitud, que contiene los datos JSON. Tenga en cuenta que los datos JSON están limitados a una profundidad máxima de 5. Si la solicitud a la API especifica un content_type de none, el campo data se omite.