通过


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

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

使用服务挂钩通知外部系统 Azure DevOps 项目中的事件。 自定义使用者扩展将 HTTP POST 发送到在发生特定事件时配置的终结点。

小窍门

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

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

本文介绍如何生成实现示例使用者服务的扩展。 示例使用者:

  • 侦听三个 Git 事件:代码推送、拉取请求创建和拉取请求更新
  • 将事件载荷通过 HTTP POST 发送到配置的终结点 URL

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

有关完整的源码,请见扩展示例 GitHub 存储库。 有关所有可用的事件类型,请参阅 服务挂钩事件类型

小窍门

有关最新的扩展开发指南,包括主题处理以及从 VSS.SDK 的迁移,请参阅 Azure DevOps 扩展 SDK 开发人员门户

服务挂钩的工作原理

服务挂钩有三个组件:

  • 发布者 触发事件,例如“已推送代码”或“已创建拉取请求”。
  • 订阅 将特定事件与操作匹配。
  • 使用者 定义要运行的操作,例如发送 HTTP POST。

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

在本文中,扩展实现自定义使用者。 发生匹配事件时,使用者会将包含事件有效负载的 HTTP POST 发送到订阅中配置的终结点 URL。

创建扩展

1.设置项目

创建扩展项目。 有关说明,请参阅 开发 Web 扩展

2.添加使用者贡献

将使用者贡献添加到 清单文件vss-extension.json)。 以下示例显示了具有服务挂钩使用者的完整清单:

{
    "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 以匹配发布者 ID。

数组 contributions 是关键部分。 每项贡献都定义了:

  • 类型ms.vss-servicehooks.consumer — 注册使用者服务
  • 目标ms.vss-servicehooks.consumers — 使用者服务集合
  • 属性:使用者配置,包括输入和操作(请参阅 属性参考

3. 打包、发布和测试

打包扩展并将其发布到 Azure DevOps 组织。 然后创建一个服务挂钩订阅,该订阅使用自定义使用者来验证它是否正常工作。

属性参考

使用者属性

资产 DESCRIPTION
id 使用者服务的唯一 ID。
姓名 当用户创建服务挂钩订阅时显示的显示名称。
说明 描述使用者服务。
informationUrl 用户可以通过此网址了解更多关于扩展的信息。
输入描述符 用户在创建订阅时提供的输入(例如 URL 终结点)。
actions 事件发生时要执行的操作,以及触发每个操作的事件类型。

操作属性

数组中的每个 actions 操作具有以下属性:

资产 DESCRIPTION
id 操作的唯一 ID。
姓名 操作的显示名称。
说明 说明操作的作用。
支持的事件类型 触发此操作的事件类型 ID 的数组。 有关可用类型,请参阅 服务挂钩事件类型
publishEvent.url 接收 HTTP POST 的终结点 URL。 使用三大括号 Mustache 语法 ({{{inputId}}}) 将用户在创建订阅时提供的 inputDescriptors 值进行替换。

后续步骤