为服务挂钩创建自定义使用者

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用服务挂钩,可以通知第三方系统有关项目中发生的事件。 可以使用自定义使用者将 HTTP 消息发送到扩展清单中定义的终结点。

本文逐步讲解如何开发实现 示例使用者服务的扩展,其中包括以下事件和操作。

  • 触发以下操作的受支持事件:
    • 推送的代码
    • 已创建拉取请求
    • 拉取请求已更新
  • 发生事件时要执行的操作受支持:
    • 执行操作 (发送 HTTP 消息)

注意

在本文中,我们将项目的主目录称为“主页”。

示例使用者服务

有关详细信息,请参阅 扩展示例 GitHub 存储库。 有关可用作自定义使用者扩展触发器的所有受支持事件的列表,请参阅 事件类型列表

提示

查看有关使用 Azure DevOps 扩展 SDK 进行扩展开发的最新文档。

服务挂钩的工作原理

服务挂钩 发布者 定义一组 事件订阅 侦听并等待 事件 ,并在触发事件时定义 操作

服务挂钩关系图

这是所有服务挂钩实现工作原理的一般说明。 对于本例,我们指定由扩展定义的使用者,以及发生事件时的指定操作。

创建扩展

  1. 了解如何从头开始创建扩展

  2. 将自定义使用者实现的特定贡献添加到基本 清单文件。 请参阅以下示例,了解添加贡献后清单的外观。

{
    "manifestVersion": 1,
    "id": "samples-service-hooks-consumer",
    "version": "0.1.2",
    "name": "Service Hooks Sample",
    "description": "A simple extension that demonstrates how to contribute a consumer service into service hooks.",
    "publisher": "fabrikam",
    "public": false,
    "icons": {
        "default": "images/logo.png"
    },
    "scopes": [],
    "files": [
        {
            "path": "images",
            "addressable": true
        }
    ],
    "content": {
        "details": {
            "path": "readme.md"
        }
    },
    "categories": [
        "Developer samples"
    ],
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "contributions": [
        {
            "id": "consumer",
            "type": "ms.vss-servicehooks.consumer",
            "targets": [
                "ms.vss-servicehooks.consumers"
            ],
            "properties": {
                "id": "consumer",
                "name": "Sample Consumer",
                "description": "Sample consumer service",
                "informationUrl": "https://aka.ms/vsoextensions",
                "inputDescriptors": [
                    {
                        "id": "url",
                        "isRequired": true,
                        "name": "URL",
                        "description": "URL to post event payload to",
                        "inputMode": "textbox"
                    }
                ],
                "actions": [
                    {
                        "id": "performAction",
                        "name": "Perform action",
                        "description": "Posts a standard event payload",
                        "supportedEventTypes": [
                            "git.push",
                            "git.pullrequest.created",
                            "git.pullrequest.updated"
                        ],
                        "publishEvent": {
                            "url": "{{{url}}}",
                            "resourceDetailsToSend": "all",
                            "messagesToSend": "all",
                            "detailedMessagesToSend": "all"
                        }
                    }
                ]
            }
        }
    ]
}

注意

请记得更新 publisher 属性。

对于扩展中的每个贡献,清单定义以下项。

  • 贡献类型 - 在本例中,使用者服务 (ms.vss-servicehooks.consumer)
  • 贡献目标 - 在本例中 (ms.vss-servicehooks.consumers) 使用者服务
  • 特定于每种贡献类型的属性

使用者具有以下属性。

属性 说明
id 使用者服务的唯一 ID。
name 自定义使用者的名称,在创建服务挂钩订阅期间可见。
description 描述使用者服务。
informationUrl 查找有关扩展的详细信息。
inputDescriptors 要由使用使用者服务创建订阅的用户使用的输入。
actions 描述要执行的操作以及触发这些操作的事件。

使用者的操作具有以下属性:

属性 说明
id 操作服务的 ID。
name 操作的名称。
description 操作的详细说明。
supportedEventTypes 可以使用此操作的触发器类型的数组。 有关详细信息,请参阅 事件类型列表
publishEvent.url HTTP 消息发送到的 URL。 它可以通过 inputDescriptors 提供的值进行模板化。 其实际值在创建订阅时由用户定义。
  1. 将扩展部署到 Azure DevOps 组织并对其进行测试。

后续步骤