Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
使用服务挂钩来通知您的项目中发生的事件至非微软系统。 自定义使用者将 HTTP 消息发送到扩展清单中定义的终结点。
小窍门
如果要启动新的 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,请参阅:
开发扩展以实现 示例使用者服务,本文逐步讲解该过程,其中包括以下事件和动作。
- 触发以下操作的事件受支持:
- 推送的代码
- 已创建拉取请求
- 已更新拉取请求
- 发生事件时支持执行的操作:
- 发送 HTTP 消息
注释
本文介绍项目的主目录作为 主页。
有关详细信息,请参阅 扩展示例 GitHub 存储库。 有关可用作自定义使用者扩展触发器的所有受支持事件的列表,请参阅 事件类型列表。
小窍门
查看有关使用 Azure DevOps 扩展 SDK 进行扩展开发的最新文档。
服务挂钩的工作原理
服务挂钩机制 发布者 定义一组 事件。 订阅 侦听 事件 并定义在事件触发时执行的 动作。
此图显示了一般服务挂钩流程:发布者发出事件,订阅项匹配事件,发生匹配时执行动作。 在本文的示例中,扩展实现使用者。 发生受支持的事件时,使用者的配置作会将 HTTP 消息发送到扩展清单中指定的终结点。
创建扩展
将自定义使用者实现的特定贡献添加到基本 清单文件。 请参阅以下示例,了解添加贡献后清单的样式。
{
"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中的令牌对该值进行模板化;用户在创建订阅时提供实际值。 |
- 将扩展部署到 Azure DevOps 组织并对其进行测试。