概述
WebHooks V2 是全新的一套 WebHook 系统。WebHooks V2 改变了一些原有的字段名,已经输出的数据结构,使得输出的数据更加全面,更加容易和第三方服务进行整合。为了使以前已经在使用 WebHooks 服务的用户能够不存在兼容性的问题,老版的 WebHooks 服务将会被保留。
WebHook 允许第三方应用监听 Coding.net 上的特定事件,以用来集成。当触发这些事件之一时,我们将向 WebHook 配置的 URL 以 HTTP POST 方式发送事件相关的内容。
WebHook 可用于更新外部问题跟踪器,触发 CI 构建,更新备份镜像,甚至部署到生产服务器,并且一切你能想象得到的功能。
WebHook 的功能设置目前在项目的「设置」菜单中。
事件
配置 WebHook 时,您可以选择要接收的事件。默认情况下,WebHooks 只订阅 push 与 merge request 事件。
每个事件都对应于您的项目可能发生的某些特定操作。 例如,如果您订阅了合并请求事件,您将在每次打开,关闭等操作时收到详细的事件内容。
目前可用的事件是(其余事件会陆续增加):
Events | 说明 |
---|---|
push | 所有使用 Git 客户端对仓库执行 push 操作时间,包含新建删除分支,新建删除标签,以及在线编辑代码等。(默认选项) |
merge request | Merge Request 的新建,关闭,拒绝,合并等事件。(默认选项) |
数据结构
每个事件类型都具有与该事件相关的数据结构。不同事件的数据结构有所不同,但是都会包含事件的执行者(sender
)以及事件发生所属的项目(repository
)。
发送 Headers 说明
Header | 说明 |
---|---|
X-Coding-Event | 事件名(例如: push, merge request) |
X-Coding-Signature | 通过 HMAC SHA1 加密算法、使用令牌作为 KEY 将发送内容加密后的值以十六进制显示(需要配置令牌),并包含前缀 sha1= |
X-Coding-Delivery | 标识此次发送的唯一 ID |
User-Agent | Coding.net Hook |
发送的具体内容
POST /payload HTTP/1.1
Host: localhost:4567
Request method: POST
User-Agent: Coding.net Hook
X-Coding-Event: push
X-Coding-Delivery: bf3f043a-3883-433c-8e20-312b04c49b46
{
"ref": "refs/heads/master",
"before": "1b4d2b060ef9e9a32f86be8c416a84a24806b575",
"after": "860385d69eda49a4af9379c844701163d19c8d6b",
"compare": "https://test.coding.net//p/test-webhook/git/compare/1b4d2b060ef9e...860385d69eda4",
...
"repository": {
"id": 4021,
"name": "test-webhook",
"full_name": "test/test-webhook",
"owner": {
"id": 652,
"login": "crystal",
"url": "https://test.coding.net/user/key/crystal",
"html_url": "https://test.coding.net//u/crystal"
},
...
},
...
"sender": {
"id": 613,
"login": "jiong",
...
}
}
签名解析 Demo
每个事件都包含的属性
Key | Value |
---|---|
sender | 事件触发者 |
repository | 当前项目 |
Ping 事件
当您创建一个新的 WebHook 时,我们将向您发送一个简单的 ping 事件,让您知道 WebHook 是否能够成功发送。您可以在 WebHooks 列表中,通过点击 ping 按钮再次触发 ping。
事件名: ping
Key | Value |
---|---|
zen | Coding! 让开发更简单 |
hook_id | 当前 WebHook 的 ID |
hook | 当前 WebHook 的配置数据 |
Push 事件
当您向您的仓库推送新的代码时,我们将向您发送一个的 Push 事件。
事件名: push
Key | Value |
---|---|
hook_id | 当前 WebHook 的 ID |
hook | 当前 WebHook 的配置数据 |
ref | 推送的 commit sha |
before | 该分支之前的 commit sha |
after | 该分支新的 commit sha |
compare | compare 的 url 地址 |
commits | 更新的 commits 内容 |
head_commit | 最新的 commit 内容 |
pusher | 推送者 |
MR 事件
当您进行一个代码合并相关操作时,我们将向您发送的 MR 事件。
事件名: merge request
Key | Value |
---|---|
action | ("synchronize", "create", "merge") |
number | 项目内资源 id |
mergeRequest | 合并请求内容 |
Task 事件
当您进行任务相关操作时,我们将向您发送 Task 事件。
事件名: task
Key | Value |
---|---|
action | ("assigned", "labeled", "opened", "edited", "closed", "reopened", "deleted") |
task | 任务内容 |
Document 事件
当您进行文件相关操作时,我们将向您发送 Document 事件。
事件名: document
Key | Value |
---|---|
action | ("create_file", "create_dir", "delete_file", "delete_dir", "update_file", "update_dir", "upload_file", "move_file", "delete_file_history", "rename", "move_folder", "move_files_or_folders", "share_file", "stop_share_file") |
document | 文件内容 |
Member 事件
当您新增或者删除项目成员时,我们将向您发送 Member 事件。
事件名: member
Key | Value |
---|---|
action | ("added", "deleted") |
member | member 内容 |