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

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

使用服务挂钩来通知您的项目中发生的事件至非微软系统。 自定义使用者将 HTTP 消息发送到扩展清单中定义的终结点。

小窍门

如果要启动新的 Azure DevOps 扩展,请先尝试这些维护的示例集合 -- 它们适用于当前产品版本并涵盖新式方案(例如,在拉取请求页上添加选项卡)。

如果某个示例在组织中不起作用,请将其安装到个人或测试组织中,并将扩展清单的目标 ID 和 API 版本与当前文档进行比较。有关参考和 API,请参阅:

开发扩展以实现 示例使用者服务,本文逐步讲解该过程,其中包括以下事件和动作。

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

注释

本文介绍项目的主目录作为 主页

此图显示了一个示例使用者服务,用于发送用于代码推送和拉取请求事件的 HTTP 消息。

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

小窍门

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

服务挂钩的工作原理

服务挂钩机制 发布者 定义一组 事件订阅 侦听 事件 并定义在事件触发时执行的 动作

显示服务挂钩流程的示意图:发布者发出事件,订阅与事件匹配,匹配成功后执行动作。

此图显示了一般服务挂钩流程:发布者发出事件,订阅项匹配事件,发生匹配时执行动作。 在本文的示例中,扩展实现使用者。 发生受支持的事件时,使用者的配置作会将 HTTP 消息发送到扩展清单中指定的终结点。

创建扩展

  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)在本例中。
  • 特定于每种贡献类型的属性。

使用者具有以下属性。

资产 DESCRIPTION
id 您的客户服务唯一 ID。
姓名 自定义使用者的名称,在创建服务挂钩订阅期间可见。
说明 描述使用者服务。
informationUrl 查找有关扩展的详细信息。
输入描述符 使用使用者服务创建订阅的用户要使用的输入。
actions 描述要执行的动作以及哪些事件会触发这些动作。

用户的操作具有以下属性:

资产 DESCRIPTION
id 操作服务的 ID。
姓名 动作的名称
说明 动作的详细说明。
支持的事件类型 可以用于此操作的触发器类型数组。 有关详细信息,请参阅 事件类型的列表
publishEvent.url 接收 HTTP 消息的终结点 URL。 可以使用inputDescriptors中的令牌对该值进行模板化;用户在创建订阅时提供实际值。
  1. 将扩展部署到 Azure DevOps 组织并对其进行测试。

后续步骤