为工具链启用事件通知

Continuous Delivery 将于 2027 年 2 月 12 日在以下地区停止提供服务:au-syd、ca-tor、us-east。 Code Risk Analyzer 也将于该日期在所有地区停止提供服务。 如果某个区域未实际使用这些功能,该区域中的相关功能可能会提前停用,并停止接受新实例。 了解更多

作为 IBM Cloud® Continuous Delivery 工具链的管理员,您可能需要通过电子邮件、短信、Slack PagerDuty, 或其他支持的交付渠道,向其他用户或人工接收方发送工具链或工具集成中的事件通知。 此外,您可能希望将这些事件通知发送到其他应用程序,以通过使用事件驱动的编程 (例如,使用 Webhook) 来构建逻辑。 这种方法得以实现,得益于工具链与 IBM Cloud® Event Notifications.之间的集成。

要将信息发送到 Event Notifications,必须向工具链 添加 Event Notifications 工具集成。 有关使用 Event Notifications的更多信息,请参阅 Event Notifications 入门。

现在,您可以使用 Event NotificationsEvent Notifications 是向 Slack 和其他通信渠道分发通知的首选方法,如 PagerDuty, 电子邮件、短信、推送通知、webhook、Microsoft® Teams、ServiceNow, 和 IBM Cloud Functions。

工具链收集和发送事件的方式

在工具链或其中一个受支持的工具集成中发生相关事件时,工具链会与已连接的 Event Notifications 实例进行通信,以将通知转发到 受支持的目标。

工具链支持两种类型的事件:

  • 内置事件在工具链中自动生成。 例如,当工具集成添加到工具链或从工具链中除去时,当管道运行启动时以及当管道运行完成时,将发送内置事件。 内置事件的有效内容由工具链确定的数据组成。
  • 客户机定制事件由工具链根据客户机使用 POST /toolchains/{toolchain_id}/events API 的请求生成。 客户机定制事件的有效内容由工具链确定的数据以及客户机提供给 API 的数据组成。

Tekton 管道步骤可利用客户定制的 POST {toolchain_id} /toolchains//events API,向 Event Notifications 目标发送包含与步骤相关且有意义信息的自定义事件。

Continuous Delivery 的事件

下表列出了工具链事件。

附加到每个子类型的 :1 字符表示主要版本号。

生成事件通知的操作
事件名称 事件类型 子类型 描述
Client event com.ibm.cloud.toolchain.client event:1 当客户机调用 POST /toolchains/{toolchain_id}/events API 时,将发送此客户机定制事件。
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 创建工具集成并将其添加到工具链时,将发送此内置事件。
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 当工具集成被删除并从工具链中除去时,将发送此内置事件。
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 此内置事件在 Tekton 管道运行或经典管道阶段启动时发送。
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 当 Tekton 管道运行或 Classic 管道阶段成功完成时,将发送此内置事件。
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 此内置事件在 Tekton 管道运行或 Classic 管道阶段完成且具有故障状态时发送。 例如,当尝试部署但未能成功完成时,将发送此事件。
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 当取消 Tekton 管道运行或 Classic 管道阶段时,将发送此内置事件。
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 当 Tekton 管道运行迂到错误并且可能未成功完成时,将发送此内置事件。 此事件主要用于基础结构和配置问题,例如,格式不正确的 Tekton 会阻止管道运行启动。

启用通知

可以将工具链或关联工具集成生成的内置事件和客户机定制事件转发到同一帐户中可用的 Event Notifications 服务实例。

请确保所选 Event Notifications 服务实例具有允许工具链向该服务实例发送 事件 的IAM授权策略。 有关通过 Event Notifications 服务实例授予授权的更多信息,请参阅《 为何我被拒绝集成实例 Event Notifications 的权限? 》。

在控制台中连接到 Event Notifications

配置 Event Notifications 以从工具链和工具集成实例发送关键事件:

  1. 若您已拥有工具链并需向其中添加此工具集成,请在控制 IBM Cloud 台中点击菜单图标 (汉堡图标 )> 平台自动化 > 工具链。 在“工具链”页面上,单击某个工具链以打开其“概述”页面。

    a. 单击 “添加工具”。

    b. 在“工具集成”部分中,单击 Event Notifications。

  2. 在工具链中的“Event Notifications”卡片上,输入您希望在此工具集成中显示的名称。 此名称用于标识工具链中的工具集成。

  3. 选择要将工具链连接到的 Event Notifications 实例。

  4. 点击“创建集成”,将 Event Notifications 工具集成添加到您的工具链中。

  5. 在工具链的“概述”页面上的 IBM Cloud 工具 卡上,单击 Event Notifications。

使用 API 连接到 Event Notifications

您可以使用 API 将 Event Notifications 工具集成添加到工具链。

  1. 获取 IAM 不记名令牌。 或者,如果您正在使用 SDK,请 获取 IAM API 密钥,并使用环境变量设置客户机选项。

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. 查找要在其中创建工具集成的工具链的标识。

  3. 将 eventnotifications 指定为 tool_type_id。

  4. 指定工具集成所需的以下 tool_parameters:

    • name: 用于标识 Event Notifications 工具集成的名称。
    • instance-crn: Event Notifications 服务实例的云资源名称 (CRN)。
  5. 在目标工具链中添加工具集成。

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

下表列出并描述了先前步骤中使用的每个变量。

用于提供工具与应用程序接口集成的变量
变量 描述
{base_url} Toolchain API 端点 URL。 有关支持的值的更多信息,请参阅 Endpoint URL。
{iam_api_key} 您的 IAM API 密钥。
{iam_token} 一个有效的 IAM 承载令牌。
{tool_name} 工具集成的名称。
{event_notifications_tool_integration_name} Event Notifications 服务实例的名称。
{event_notifications_service_crn} Event Notifications 服务实例的云资源名称 (CRN)。
{toolchain_id} 要在其中创建工具集成的工具链。

添加与 Terraform 的工具集成

您可以使用 Terraform 将 Event Notifications 工具集成添加到工具链。

IBM Cloud 使用 Terraform 添加工具集成时,需要 Terraform 提供程序版本 1.53.0 或更高版本。

  1. 要安装 Terraform 命令行界面 (CLI) 并为 Terraform 配置 IBM Cloud 提供程序插件,请遵循 IBM Cloud® 上的 Terraform 入门教程。

  2. 创建一个名为 main.tf 的Terraform配置文件。 在此文件中,添加配置以使用 HashiCorp 配置语言 (HCL) 创建资源实例。 有关使用此配置语言的更多信息,请参阅 Terraform 文档。

    以下示例使用 ibm_cd_toolchain_tool_pipeline 资源创建 Delivery Pipeline 工具集成,其中 toolchain_id 是表示要在其中创建工具集成的工具链的 GUID。

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

    有关工具集成资源的更多信息,请参阅 IBM Cloud Terraform Registry中受支持工具集成资源的完整列表。

  3. 初始化 Terraform CLI。

    terraform init
    
  4. 创建 Terraform 执行计划。 此计划总结了为创建工具集成而必须运行的操作。

    terraform plan
    
  5. 应用 Terraform 执行计划。 Terraform 将执行必需的操作来创建工具集成。

    terraform apply
    

下表列出并描述了先前步骤中使用的每个变量。

用于提供工具与应用程序接口集成的变量
变量 描述
{event_notifications_tool_integration_name} Event Notifications 服务实例的名称。
{event_notifications_service_crn} Event Notifications 服务实例的 CRN。
{toolchain_id} 要在其中创建工具集成的工具链。

将通知交付到所选目标

对工具链启用事件通知后,请在 Event Notifications 中创建 主题,目标 和 预订,以便可以将警报转发并传递到所选目标。

有关支持目的地的完整列表,请 参 阅 Event Notifications 文档。

通知有效内容详细信息

工具链及其关联工具集成实例生成的事件包含各种字段,可帮助您识别事件的源和详细信息。

POST {toolchain_id} /toolchains//events API 将返回 200 状态码,表示请求已处理。 这并不一定意味着事件已成功发送至对应 Event Notifications 的服务实例。

来自工具链和工具集成实例的内置事件通知仅包含元数据属性,例如资源的名称或标识。 生成的事件中不包含敏感数据,例如 API 密钥或密码。

客户定制事件通知包含客户向 POST {toolchain_id} /toolchains//events API 提供的数据。 请勿在 API 调用中包含凭证,个人标识信息或其他敏感信息。

发送到 Event Notifications 的属性因事件类型而异。 例如,如果发生 com.ibm.cloud.toolchain.pipeline:pipeline_start:1 事件,那么工具链会将通知有效内容发送到类似于以下示例的 Event Notifications。

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

下表提供了有关每个事件通知属性的详细信息。

事件通知有效载荷中的属性
属性 描述
subject 可选。 表示启动事件的主题的对象。 此对象可能包含以下字段:

name: 主体集的名称。

email: 主题的电子邮件。

iam_id: 主体的 IAM 标识。

toolchain.instance 表示事件源自的工具链的对象。 此对象包含以下字段:

crn: 工具链的 CRN。

id: 工具链的标识。

resource_group_id: 工具链的资源组的标识。

name: 工具链的名称。

href: 工具链的公共 API 端点。

ui_href: 工具链的 UI 端点。

toolchain.tool-instance 可选。 表示参与事件的工具链实例的对象。 此对象存在并且仅适用于特定于工具或工具集成的事件。 对于 toolchain_bind 和 toolchain_unbind 子类型,此对象是正在绑定或取消绑定的工具集成实例。 对于管道事件,此对象是发起事件的管道工具集成实例。 此对象包含以下字段:

id: 工具集成实例的标识。

tool_type_id: 工具类型.

href的标识: 工具集成实例的公共 API 端点。

state: 工具集成实例的状态。

referent: 包含有关工具集成实例所表示的工具的信息的对象。 例如, ui_href 是工具集成实例所表示的工具集成的 UI 端点。

name: 可选。 工具集成实例的名称。

toolchain.pipeline-run 可选。 表示源自事件的 Tekton 管道运行或 Classic 管道阶段运行的对象。 此对象存在且仅适用于管道事件,并且包含以下字段:

id: Tekton 管道运行或经典管道阶段的标识。

ui_href: Tekton 管道运行或 Classic 管道阶段的 UI 端点。

run_number: 可选。 Tekton 管道运行或 Classic 管道阶段的运行号。

start_time: 可选。 开始运行的时间,采用 ISO 8601 格式。

finish_time: 可选。 完成运行的时间,采用 ISO 8601 格式。

duration: 可选。 运行持续时间,采用 ISO 8601 格式。

trigger: 可选。 包含有关运行 Tekton 管道的触发器的信息的对象。 例如, name,这是 Tekton 管道触发器的名称。

toolchain.external-event 可选。 包含通过调用 POST /toolchains/{toolchain_id}/events API 而产生的客户机定制事件的详细信息的对象。 此对象存在并且仅适用于客户机定制事件。 此对象包含以下字段:

id: 由 POST /toolchains/{toolchain_id}/events API 生成的客户机定制事件的标识。

title: POST /toolchains/{toolchain_id}/events API 的请求有效内容中 title 字段的值。

description: POST /toolchains/{toolchain_id}/events API 的请求有效内容中 description 字段的值。

data: 可选。 此字段的存在和值取决于提交到 POST /toolchains/{toolchain_id}/events API 的请求有效内容。 如果向 API 提出的请求指定了 content_type 的 text/plain,那么 data 字段中就会出现请求有效载荷中 data.text_plain.content 字段的值,其中包含字符串数据。 如果向 API 发出的请求指定了 content_type 的 application/json,那么 data 字段中就会出现请求有效负载中包含 JSON 数据的 data.application_json.content 字段的值。 请注意,JSON 数据的最大深度限制为 5。 如果对 API 的请求指定 content_type of none,那么将省略 data 字段。