Ativação de notificações de eventos para cadeias de ferramentas

DevOps Insights chegará ao fim de sua vida útil e será descontinuado em 31 de agosto de 2026. O serviço Continuous Delivery será descontinuado nas seguintes regiões em 12 de fevereiro de 2027: au-syd, ca-tor, us-east. O Code Risk Analyzer também será descontinuado em todas as regiões nessa data. Se uma região não apresentar uso ativo desses recursos, os recursos nessa região poderão ser descontinuados mais cedo e deixar de aceitar novas instâncias. Saiba mais

Como administrador de IBM Cloud® Continuous Delivery toolchains, você pode querer enviar notificações de eventos em uma toolchain ou integração de ferramentas para outros usuários ou destinos humanos, usando e-mail, SMS, Slack ou PagerDuty, outros canais de entrega compatíveis. Além disso, talvez você queira enviar essas notificações de eventos para outros aplicativos a fim de criar uma lógica por meio da programação orientada a eventos, utilizando webhooks, por exemplo. Essa abordagem é viabilizada pela integração entre as cadeias de ferramentas e o IBM Cloud® Event Notifications.

Para enviar informações para Event Notifications, deve-se incluir uma Event Notifications integração de ferramenta em sua cadeia de ferramentas. Para obter mais informações sobre como trabalhar com Event Notifications, consulte Introdução ao Event Notifications.

Agora você pode distribuir notificações de eventos usando a integração da ferramenta Event NotificationsEvent Notifications é o método preferido para distribuir notificações para o Slack e outros canais de comunicação, como PagerDuty, e-mail, SMS, notificações por push, webhook, Microsoft® Teams, ServiceNow, e IBM Cloud Functions.

Como os eventos são coletados e enviados pelas cadeias de ferramentas

Quando um evento de interesse ocorre em uma cadeia de ferramentas ou uma das integrações de ferramentas suportadas, a cadeia de ferramentas se comunica com uma instância do Event Notifications conectada para encaminhar uma notificação para um destino suportado.

As cadeias de ferramentas suportam dois tipos de eventos:

  • Eventos integrados são gerados automaticamente em uma cadeia de ferramentas. Por exemplo, eventos integrados são enviados quando integrações de ferramentas são incluídas ou removidas de uma cadeia de ferramentas, quando as execuções de pipeline são iniciadas e quando as execuções de pipeline são concluídas. A carga útil de um evento integrado consiste em dados determinados pela cadeia de ferramentas..
  • Os eventos sob medida do cliente são gerados por uma cadeia de ferramentas na solicitação de um cliente usando a API POST /toolchains/{toolchain_id}/events. A carga útil de um evento customizado do cliente consiste em dados determinados pela cadeia de ferramentas e dados fornecidos para a API pelo cliente.

As etapas do pipeline do Tekton podem aproveitar a API POST {toolchain_id} /toolchains//events personalizada do cliente para enviar eventos personalizados para Event Notifications destinos que transportam informações relevantes e significativas para as etapas.

Eventos para o Continuous Delivery

A tabela a seguir lista os eventos da cadeia de ferramentas.

Os caracteres :1 que são anexados a cada subtipo representam números da versão principal.

Ações que geram notificações de eventos
Nome do Evento Tipo de evento Subtipo Descrição
Client event com.ibm.cloud.toolchain.client event:1 Esse evento de cliente sob medida é enviado quando um cliente chama a API POST /toolchains/{toolchain_id}/events.
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 Esse evento integrado é enviado quando uma integração de ferramenta é criada e incluída em uma cadeia de ferramentas..
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 Esse evento integrado é enviado quando uma integração de ferramenta é excluída e removida de uma cadeia de ferramentas
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 Esse evento integrado é enviado quando uma execução de pipeline Tekton ou um estágio de pipeline Classic é iniciado.
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 Esse evento integrado é enviado quando uma execução de pipeline Tekton ou um estágio de pipeline Classic é concluído com sucesso.
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 Esse evento integrado é enviado quando uma execução de pipeline do Tekton ou um estágio de pipeline do Classic é concluído com um status de falha Por exemplo, esse evento é enviado quando uma implementação é tentada, mas falha ao ser concluída com êxito
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 Esse evento integrado é enviado quando uma execução de pipeline Tekton ou um estágio de pipeline Classic é cancelado.
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 Esse evento integrado é enviado quando uma execução de pipeline do Tekton encontra um erro e provavelmente não foi concluída com êxito. Esse evento é usado principalmente para problemas de infraestrutura ou de configuração, como quando o Tekton malformado impede que a execução do pipeline seja iniciada

Ativando notificações

Eventos integrados e personalizados do cliente que são gerados por uma cadeia de ferramentas ou uma integração de ferramenta associada podem ser encaminhados para uma instância de serviço Event Notifications que está disponível na mesma conta.

Certifique-se de que a instância de Event Notifications serviço selecionada tenha uma política de autorização IAM que permita que o conjunto de ferramentas envie eventos para essa instância de serviço. Para obter mais informações sobre como conceder autorização com a instância Event Notifications de serviço, consulte Por que minha permissão para integrar uma Event Notifications instância foi negada?

Conectando-se ao Event Notifications no console

Configure Event Notifications para enviar eventos críticos de cadeias de ferramentas e instâncias de integração de ferramentas:

  1. Se você já possui uma cadeia de ferramentas e deseja adicionar essa integração de ferramenta a ela, no console do IBM Cloud, clique no ícone de menu ( ícone de hambúrguer ) > Automação de Plataforma > Cadeias de Ferramentas. Na página Cadeias de ferramentas, clique na cadeia de ferramentas para abrir a sua página de Visão geral.

    a. Clique em Incluir ferramenta.

    b. Na seção Integrações de ferramentas, clique em Event Notifications.

  2. Digite o nome que você deseja exibir para esta integração de ferramentas no cartão do Event Notifications em sua cadeia de ferramentas. Este nome é usado para identificar a integração da ferramentas em sua cadeia de ferramentas.

  3. Selecione a instância do Event Notifications à qual conectar a cadeia de ferramentas.

  4. Clique em “Criar integração” para adicionar a integração da ferramenta Event Notifications à sua cadeia de ferramentas.

  5. Na página “Visão geral” da sua cadeia de ferramentas, no cartão “ IBM Cloud ferramentas ”, clique em “ Event Notifications ”.

Conectando-se ao Event Notifications com a API

É possível incluir a integração da ferramenta Event Notifications em sua cadeia de ferramentas usando a API.

  1. Obtenha um token de acesso do IAM Como alternativa, se você estiver usando um SDK, obtenha uma chave API do IAM e configure as opções do cliente usando variáveis de ambiente.

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. Consulte o ID da cadeia de ferramentas na qual você deseja criar sua integração de ferramenta.

  3. Especifique eventnotifications como tool_type_id.

  4. Especifique o tool_parameters a seguir que é necessário pela integração de ferramenta:

    • name: o nome usado para identificar a integração da ferramenta Event Notifications.
    • instance-crn: o Cloud Resource Name (CRN) da instância de serviço Event Notifications.
  5. Adicione a integração da ferramenta à cadeia de ferramentas pretendida.

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

A tabela a seguir lista e descreve cada uma das variáveis usadas nas etapas anteriores.

Variáveis para provisionar a integração da ferramenta com a API
Variável Descrição
{base_url} O endpoint da API da cadeia URL de ferramentas. Para obter mais informações sobre os valores suportados, consulte Endpoint URL.
{iam_api_key} Sua chave de API do IAM.
{iam_token} Um token de portador IAM válido.
{tool_name} O nome da integração da ferramenta.
{event_notifications_tool_integration_name} O nome da instância do serviço “ Event Notifications ”.
{event_notifications_service_crn} O Nome do Recurso na Nuvem (CRN) da instância do serviço “ Event Notifications ”.
{toolchain_id} A cadeia de ferramentas na qual a integração de ferramenta será criada

Incluindo uma integração de ferramenta com o Terraform

É possível incluir a integração da ferramenta Event Notifications em sua cadeia de ferramentas usando o Terraform.

IBM Cloud É necessária a versão do provedor 1.53.0 Terraform ou posterior para adicionar uma integração de ferramenta usando o Terraform.

  1. Para instalar a interface de linha de comando (CLI) do Terraform e configurar o plug-in do provedor IBM Cloud para o Terraform, siga o tutorial disponível em Introdução ao Terraform em IBM Cloud®.

  2. Crie um arquivo de configuração do Terraform que seja denominado main.tf. Neste arquivo, adicione a configuração para criar instâncias de recursos usando a Linguagem de Configuração do HashiCorp (HCL). Para obter mais informações sobre como usar essa linguagem de configuração, consulte a Documentação do Terraform

    O exemplo a seguir cria uma integração de ferramenta Delivery Pipeline usando o recurso ibm_cd_toolchain_tool_pipeline, em que toolchain_id é um GUID que representa a cadeia de ferramentas na qual criar a integração de ferramenta.

    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 obter mais informações sobre recursos de integração de ferramentas, consulte a lista completa de recursos de integração de ferramentas suportados no IBM Cloud Terraform Registry.

  3. Inicialize a CLI do Terraform.

    terraform init
    
  4. Crie um plano de execução do Terraform. Este plano resume as ações que devem ser executadas para criar a integração de ferramenta

    terraform plan
    
  5. Aplique o plano de execução do Terraform. O Terraform toma as ações necessárias para criar a integração de ferramenta

    terraform apply
    

A tabela a seguir lista e descreve cada uma das variáveis usadas nas etapas anteriores.

Variáveis para provisionar a integração da ferramenta com a API
Variável Descrição
{event_notifications_tool_integration_name} O nome da instância do serviço “ Event Notifications ”.
{event_notifications_service_crn} O CRN da instância do serviço Event Notifications.
{toolchain_id} A cadeia de ferramentas na qual a integração de ferramenta será criada

Entregando notificações para destinos selecionados

Depois de ativar as notificações de eventos para uma cadeia de ferramentas, crie tópicos, destinos e inscrições no Event Notifications para que os alertas possam ser encaminhados e entregues para os destinos selecionados..

Para obter uma lista completa de destinos suportados, consulte a Documentação do Event Notifications.

Detalhes da carga útil de notificação

Os eventos que são gerados por cadeias de ferramentas e suas instâncias de integração de ferramentas associadas contêm vários campos que ajudam a identificar a origem e os detalhes de um evento

A API POST {toolchain_id} /toolchains//events retornará um código de status 200 para indicar que a solicitação foi processada. Isso não significa necessariamente que os eventos foram enviados com sucesso para as instâncias de serviço Event Notifications correspondentes.

Notificações de eventos integradas de cadeias de ferramentas e instâncias de integração de ferramentas contêm apenas propriedades de metadados, como nomes ou identificadores de recursos. Dados confidenciais, como chaves de API ou senhas, não são incluídos nos eventos gerados.

As notificações de eventos personalizadas do cliente contêm os dados fornecidos pelo cliente à API POST {toolchain_id} /toolchains//events. Não inclua credenciais, informações de identificação pessoal ou outras informações confidenciais em chamadas para a API.

As propriedades enviadas para Event Notifications variam de acordo com o tipo de evento. Por exemplo, se um evento do com.ibm.cloud.toolchain.pipeline:pipeline_start:1 ocorrer, a cadeia de ferramentas enviará uma carga útil de notificação para Event Notifications que é semelhante ao exemplo a seguir.

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

A tabela a seguir fornece informações detalhadas sobre cada propriedade de notificação de eventos..

Propriedades em uma carga útil de notificação de evento
Propriedade Descrição
subject Opcional. O objeto que representa o sujeito que iniciou o evento Esse objeto pode conter os seguintes campos:

name: O nome do assunto.

email: O e-mail do assunto.

iam_id: O ID do IAM do assunto.

.

toolchain.instance O objeto que representa a cadeia de ferramentas na qual o evento foi originado Esse objeto contém os campos a seguir:

crn: o CRN da cadeia de ferramentas.

id: O ID da cadeia de ferramentas.

resource_group_id: O ID do grupo de recursos da cadeia de ferramentas.

name: O nome da cadeia de ferramentas.

href: O terminal de API público para a cadeia de ferramentas.

ui_href:. O terminal da UI para a cadeia de ferramentas.

toolchain.tool-instance Opcional. O objeto que representa a instância da cadeia de ferramentas que participa do evento Esse objeto está presente e é aplicável apenas a eventos específicos de uma ferramenta ou integração de ferramenta. Para os subtipos toolchain_bind e toolchain_unbind, esse objeto é a instância de integração de ferramenta que está sendo ligada ou desvinculada Para eventos de pipeline, esse objeto é a instância de integração da ferramenta de pipeline na qual o evento foi originado Esse objeto contém os seguintes campos:

id: O ID da instância de integração de ferramenta.

tool_type_id: O ID do tipo de ferramenta.

href: O terminal de API público para a instância de integração de ferramenta

state: O estado da instância de integração da ferramenta.

referent: Um objeto que contém informações sobre a ferramenta que é representada pela instância de integração de ferramenta Por exemplo, ui_href que é o terminal da UI para a integração de ferramenta que é representada pela instância de integração de ferramenta.

name: Opcional. O nome da instância de integração de ferramenta

toolchain.pipeline-run Opcional. O objeto que representa a execução do pipeline Tekton ou a execução do estágio do pipeline Classic em que o evento foi originado. Esse objeto está presente e é aplicável apenas a eventos de pipeline e contém os campos a seguir:

id: o ID da execução de pipeline do Tekton ou o estágio de pipeline do Classic.

ui_href: O terminal da UI da execução do pipeline do Tekton ou do estágio de pipeline do Classic.

run_number: Opcional. O número de execução da execução de pipeline do Tekton ou o estágio de pipeline Clássico.

start_time: Opcional. O horário em que a execução foi iniciada no formato ISO 8601.

finish_time: Opcional. O horário em que a execução foi concluída no formato ISO 8601.

duration: Opcional. A duração da execução, no formato ISO 8601.

trigger: Opcional. Um objeto que contém informações sobre o acionador que executou o pipeline Tekton. Por exemplo, name, que é o nome do acionador de pipeline Tekton.

toolchain.external-event Opcional. O objeto que contém os detalhes de um evento customizado do cliente resultante da chamada da API POST /toolchains/{toolchain_id}/events. Esse objeto está presente e é aplicável apenas a eventos sob medida do cliente Esse objeto contém os campos a seguir:

id: o ID do evento de personalização do cliente produzido pela API POST /toolchains/{toolchain_id}/events.

title: O valor do campo title na carga útil da solicitação para a API POST /toolchains/{toolchain_id}/events.

description: O valor do campo description na carga útil da solicitação para a API POST /toolchains/{toolchain_id}/events.

data: Opcional. A presença e o valor desse campo dependem da carga útil de solicitação enviada para a API POST /toolchains/{toolchain_id}/events. Se a solicitação à API especificar um content_type de text/plain, o campo data estará presente com o valor do campo data.text_plain.content da carga útil da solicitação, contendo os dados da cadeia de caracteres. Se a solicitação para a API especificar um content_type de application/json, o campo data estará presente com o valor do campo data.application_json.content da carga útil da solicitação, contendo os dados JSON. Observe que os dados JSON são limitados a uma profundidade máxima de 5. Se a solicitação para a API especificar um content_type de none, o campo data será omitido.