Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022
使用服务挂钩通知外部系统 Azure DevOps 项目中的事件。 自定义使用者扩展将 HTTP POST 发送到在发生特定事件时配置的终结点。
小窍门
如果要启动新的 Azure DevOps 扩展,请先尝试这些维护的示例集合 -- 它们适用于当前产品版本并涵盖新式方案(例如,在拉取请求页上添加选项卡)。
- Azure DevOps 扩展示例 (GitHub)-一个演示常见扩展模式的紧凑初学者示例: https://github.com/microsoft/azure-devops-extension-sample
- Azure DevOps 扩展样例(旧版集合和贡献指南),安装以检查用户界面目标或查看源:https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide 和 https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide
- Microsoft Learn 示例(浏览 Azure DevOps 示例)- 跨 Microsoft 文档的精选、最新的示例:/samples/browse/?terms=azure%20devops%20extension
如果某个示例在组织中不起作用,请将其安装到个人或测试组织中,并将扩展清单的目标 ID 和 API 版本与当前文档进行比较。有关参考和 API,请参阅:
本文介绍如何生成实现示例使用者服务的扩展。 示例使用者:
- 侦听三个 Git 事件:代码推送、拉取请求创建和拉取请求更新
- 将事件载荷通过 HTTP POST 发送到配置的终结点 URL
有关完整的源码,请见扩展示例 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 值进行替换。 |