更新时间:2023-07-25 GMT+08:00

Webhook设置

Webhook简介

开发人员可在 Webhook 界面配置第三方系统的 URL,并根据项目需求订阅代码托管仓库的分支推送(push)、标签推送(tag push)等事件。当订阅事件发生时,可通过Webhook向第三方系统的URL发送 POST请求,用以触发自己系统(第三方系统)的相关操作,例如:触发自己系统(第三方系统)界面的通知弹窗;或触发自己系统(第三方系统)的构建、更新镜像、部署等操作。

若您需要用发送邮件作为仓库变化的通知方式,可通过配置“基础设置”中的通知设置实现。

如何在代码托管服务中设置Webhook

Webhook设置位于仓库详情中的 设置 > 仓库管理 > Webhook设置

此设置只针对被设置的仓库生效。

只有仓库管理员和仓库所有者能看到这个页面且有设置权限。

  • 每个仓库最多只能设置20个Webhook。
  • 您在配置 Webhook 的时候,还可以选择设置您的 Token,该 Token 会与您的 Webhook URL 关联,服务会将该 Token 放在请求头的 X-Codehub-Token 字段发送给您。

代码托管服务的Webhook都有哪些事件(Events)?

  • 当您配置了 Webhook,您可以选择订阅哪些仓库事件,只有当订阅了的仓库事件发生了,代码托管 才会给您发送请求,也可以通过 Webhook 设置页面随时更改您订阅的事件。
  • 代码托管提供了以下事件供您订阅:
    • 推送事件
    • 标签推送事件
    • 合并请求事件
    • 评论事件
  • 举个例子:当您的 Webhook 订阅了合并请求事件,那么当该仓库每新建,关闭,重开任意一个合并请求时,代码托管 都会给您配置的 Webhook URL 发送一个 POST 请求告知您该事件的发生,这样您可以在有新的合并请求变更的时候处理您的一些事务。

    POST请求信息

    代码托管给你发送的 POST 请求将包含如下信息:
    headers:                                 
      Content-Length: 2294
      Connection: keep-alive               
      Host: your.host.com
      X-Devcloud-Event: Push Hook         
      Content-Type: application/json
      X-Devcloud-Token: xxxxxxx (如果配置了的话)
      body:(推送的具体信息)
      {
        "object_kind": "push", 
        "event_name": "push",                                //事件类型,此例中为推送事件
        "before": "0101010101010101010101010101010101010101",     //before、after分别记录了此次动作前后的commitID
        "after": "0123456789012345678901234567890123456789",      
        "ref": "refs/heads/master",                               //触发的分支
        "checkout_sha": "0123456789012345678901234567890123456789",  //触发事件时被检出的版本
        "message": "",
        "user_id": 1234,                                             //以下为操作者的信息
        "user_name": "example_user",
        "user_username": "example_user",
        "user_email": "example@huawei.com",
        "user_avatar": null,
        "project_id": 123456,                                       //以下为触发事件的项目的信息
        "project": {
          "id": 123456,
          "name": "ExampleRepository",
          "description": "This is an example repository",
          "web_url": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository",
          "avatar_url": null,
          "git_ssh_url": "git@codehub.devcloud.huaweicloud.com:ExampleNamespace/ExampleRepository.git",
          "git_http_url": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository.git",
          "namespace": "ExampleNamespace",
          "visibility_level": 0,
          "path_with_namespace": "ExampleNamespace/ExampleRepository",
          "default_branch": "master",
          "ci_config_path": null,
          "homepage": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository",
          "url": "git@codehub.devcloud.huaweicloud.com:ExampleNamespace/ExampleRepository.git",
          "ssh_url": "git@codehub.devcloud.huaweicloud.com:ExampleNamespace/ExampleRepository.git",
          "http_url": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository.git"
       },
      "commits": {                                           //触发事件的提交的信息
        "id": "0123456789012345678901234567890123456789",
        "message": "This is an example message",
        "timestamp": "2019-05-30T08:50:37Z",
        "url": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository/commit/0123456789012345678901234567890123456789",
        "author": {
          "name": "example_user",
          "email": "example@huawei.com"
        }"added": [
          "src/main/java/HelloWorld.java"
        ],
        "modified": [],
        "removed": []
      },
      "total_commits_count": 1,
      "repository": {                                      //仓库信息
        "name": "ExampleRepository",
        "url": "git@codehub.devcloud.huaweicloud.com:ExampleNamespace/ExampleRepository.git",
        "description": "This is an example repository",
        "homepage": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository",
        "git_http_url": "https://codehub.devcloud.huaweicloud.com/ExampleNamespace/ExampleRepository.git",
        "git_ssh_url": "git@codehub.devcloud.huaweicloud.com:ExampleNamespace/ExampleRepository.git",
        "visibility_level": 0
      }
    }