Drone CI 中文文档

消息钩子 (Webhooks) 概览

系统 WebHooks(消息钩子)可以用来在每次系统事件发生时向指定的 Endpoint(端点)发送一个 http 请求。以下是系统事件的例子:

  • 用户被创建
  • 用户被删除
  • 存储库被激活
  • 存储库被取消激活
  • 构建被创建
  • 构建被更新或完成

配置

  1. 创建一个用于签署 HTTP 请求的共享密钥。这个共享密钥将被提供给 Drone Server 和你的 WebHook 接收者/接收服务。

    1
    2
    
    $ openssl rand -hex 16
    bea26a2221fd8090ea38720fc445eca6
    
  2. 更新你的 Drone Server 配置,包括 WebHook 端点地址和共享密钥。

    1
    2
    
    DRONE_WEBHOOK_ENDPOINT=http://...
    DRONE_WEBHOOK_SECRET=bea26a2221fd8090ea38720fc445eca6
    

请求

以下是 WebHook 请求头的示例:

1
2
3
4
5
6
7
POST / HTTP/1.1
Host: www.nowhere123.com
Date: Wed, 01 Jan 2020 00:00:00 GMT
Content-Type: application/json
Content-Length: 358
X-Drone-Event: user
Authorization: hmac-key",algorithm="hmac-sha256",signature="QrS16+RlRsFjXn5IVW8tWz+3ZRAypjpNgzehEuvJksk=

以下是 WebHook 请求体的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "action": "created",
    "user": {
        "id": 1,
        "login": "octocat",
        "email": "octocat@github.com",
        "active": true,
        "admin": false,
        "machine": false,
        "syncing": false,
        "synced": 1564096971,
        "created": 1564096971,
        "updated": 1564096971,
        "last_login": 1564096971
    }
}

鉴权

HTTP 请求根据 HTTP 签名规范草案 使用共享密钥进行签名。接收者应该使用签名来验证 WebHook 的真实性和完整性。

用于HTTP 签名验证的第三方库。

事件

HTTP 请求包括一个请求头变量,以确定他的事件类型。以下是事件类型的列表:

X-Drone-Event: user
X-Drone-Event: repo
X-Drone-Event: build

行为

Payload 数据中包括一个行为字段,它可以用来确定对该对象采取的动作类型。在下面的例子中,我们看到用户对象被创建。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "action": "created",
    "user": {
        "id": 1,
        "login": "octocat",
        "email": "octocat@github.com",
        "active": true,
        "admin": false,
        "machine": false,
        "syncing": false,
        "synced": 1564096971,
        "created": 1564096971,
        "updated": 1564096971,
        "last_login": 1564096971
    }
}