概述

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 requestMerge Request 的新建,关闭,拒绝,合并等事件。(默认选项)

数据结构

每个事件类型都具有与该事件相关的数据结构。不同事件的数据结构有所不同,但是都会包含事件的执行者(sender)以及事件发生所属的项目(repository)。

发送 Headers 说明

Header说明
X-Coding-Event事件名(例如: push, merge request)
X-Coding-Signature通过 HMAC SHA1概述 - 图1 加密算法、使用令牌作为 KEY 将发送内容加密后的值以十六进制显示(需要配置令牌),并包含前缀 sha1=
X-Coding-Delivery标识此次发送的唯一 ID
User-AgentCoding.net Hook

发送的具体内容

  1. POST /payload HTTP/1.1
  2. Host: localhost:4567
  3. Request method: POST
  4. User-Agent: Coding.net Hook
  5. X-Coding-Event: push
  6. X-Coding-Delivery: bf3f043a-3883-433c-8e20-312b04c49b46
  7. {
  8. "ref": "refs/heads/master",
  9. "before": "1b4d2b060ef9e9a32f86be8c416a84a24806b575",
  10. "after": "860385d69eda49a4af9379c844701163d19c8d6b",
  11. "compare": "https://test.coding.net//p/test-webhook/git/compare/1b4d2b060ef9e...860385d69eda4",
  12. ...
  13. "repository": {
  14. "id": 4021,
  15. "name": "test-webhook",
  16. "full_name": "test/test-webhook",
  17. "owner": {
  18. "id": 652,
  19. "login": "crystal",
  20. "url": "https://test.coding.net/user/key/crystal",
  21. "html_url": "https://test.coding.net//u/crystal"
  22. },
  23. ...
  24. },
  25. ...
  26. "sender": {
  27. "id": 613,
  28. "login": "jiong",
  29. ...
  30. }
  31. }

签名解析 Demo

每个事件都包含的属性

KeyValue
sender事件触发者
repository当前项目

Ping 事件

当您创建一个新的 WebHook 时,我们将向您发送一个简单的 ping 事件,让您知道 WebHook 是否能够成功发送。您可以在 WebHooks 列表中,通过点击 ping 按钮再次触发 ping。

事件名: ping

KeyValue
zenCoding! 让开发更简单
hook_id当前 WebHook 的 ID
hook当前 WebHook 的配置数据

Push 事件

当您向您的仓库推送新的代码时,我们将向您发送一个的 Push 事件。

事件名: push

KeyValue
hook_id当前 WebHook 的 ID
hook当前 WebHook 的配置数据
ref推送的 commit sha
before该分支之前的 commit sha
after该分支新的 commit sha
comparecompare 的 url 地址
commits更新的 commits 内容
head_commit最新的 commit 内容
pusher推送者

MR 事件

当您进行一个代码合并相关操作时,我们将向您发送的 MR 事件。

事件名: merge request

KeyValue
action("synchronize", "create", "merge")
number项目内资源 id
mergeRequest合并请求内容

Task 事件

当您进行任务相关操作时,我们将向您发送 Task 事件。

事件名: task

KeyValue
action("assigned", "labeled", "opened", "edited", "closed", "reopened", "deleted")
task任务内容

Document 事件

当您进行文件相关操作时,我们将向您发送 Document 事件。

事件名: document

KeyValue
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

KeyValue
action("added", "deleted")
membermember 内容