Drone CI 中文文档

创建一个 Webhook Receiver

本教程的目的是以我们的 Golang 项目模板为基础,建立一个自定义的 WebHook Receiver。一个 WebHook Receiver 是一个小型的 HTTP 服务器,用于接收和处理 WebHooks。

本教程假定你有 Go 编程语言的工作知识。你还需要安装boilr,这是一个脚手架系统,用于从模板生成新的代码项目。

创建项目

Drone 提供了脚手架,用于从项目模板创建新的 WebHook Receiver。我们将使用这个模板启动我们的项目。

  1. 安装 WebHook 模板:

    1
    
    boilr template download drone/boilr-webhook drone-webhook
    
  2. 创建一个新的 WebHook 项目:

    1
    
    boilr template use drone-webhook my-webhook-receiver
    

自定义代码

生成的项目创建了一个简单的服务器,能够接收、验证和解析请求。你只需要修改 plugin.Deliver 函数以包括你的自定义处理逻辑。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package plugin

import (
 "context"

 "github.com/drone/drone-go/plugin/webhook"
)

// 返回一个新的 WebHook 扩展
func New() webhook.Plugin {
 return &plugin{}
}

type plugin struct {
}

func (p *plugin) Deliver(ctx context.Context, req *webhook.Request) error {
 // 在此插入你的自定义逻辑
 return nil
}

构建你的 Docker 镜像

生成的项目包括一个 Dockefile,你可以用它来构建和发布镜像。你将需要更新 Dockerfile 的入口。

  1. 建立你的二进制文件:

    1
    
    GOOS=linux CGO_ENABLED=0 go build
    
  2. 建立并发布你的 Docker 镜像:

    1
    2
    
    docker build -t my-webhook-receiver .
    docker push my-webhook-receiver
    

启动 WebHook Receiver

  1. 创建一个用于签署 HTTP 请求的共享密钥:

    1
    2
    
    $ openssl rand -hex 16
    bea26a2221fd8090ea38720fc445eca6
    
  2. 启动 WebHook Receiver:

    1
    2
    3
    4
    
    $ docker run \
    -p 3000:3000 \
    -e DRONE_SECRET=bea26a2221fd8090ea38720fc445eca6 \
    my-webhook-receiver
    

启用 WebHooks

一旦 WebHook Receiver 运行,你将需要向你的 Drone Server 提供 WebHook 端点和密钥。

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