本指南提供了一个简短的教程,用于创建一个 WebHook 插件,使用 Go 编程语言,在构建流水线中触发 http 请求。下面的例子演示了我们如何在 Yaml 文件中配置一个 WebHook 插件。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  | 
kind: pipeline
type: docker
name: default
steps:
- name: webhook
  image: acme/webhook
  settings:
    url: http://hook.acme.com
    method: post
    body: |
      hello world      
  | 
 
创建一个 Go 程序,使用 Yaml 的配置参数进行 http 请求,这些参数以大写的环境变量形式传递给程序,前缀为 PLUGIN_。这里有更多关于插件输入的信息。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
  | 
package main
import (
	"net/http"
	"os"
	"strings"
)
func main() {
	body := strings.NewReader(
		os.Getenv("PLUGIN_BODY"),
	)
	_, err := http.NewRequest(
		os.Getenv("PLUGIN_METHOD"),
		os.Getenv("PLUGIN_URL"),
		body,
	)
	if err != nil {
		os.Exit(1)
	}
}
  | 
 
在主机上为目标平台编译你的二进制文件。在主机上编译并将二进制文件添加到镜像中被认为是一种最佳做法,因为它减少了整个镜像的大小。
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o webhook
创建一个 Docker 文件,将你编译的二进制文件添加到镜像中,并将镜像配置为运行你的二进制文件作为主要入口。
1
2
3
4
  | 
FROM alpine
ADD webhook /bin/
RUN apk -Uuv add ca-certificates
ENTRYPOINT /bin/webhook
  | 
 
建立并发布你的插件到 Docker 注册表。一旦发布,你的插件就可以与更广泛的 Drone 社区共享。
1
2
  | 
docker build -t acme/webhook .
docker push acme/webhook
  | 
 
在本地从命令行执行你的插件,以验证它是否工作。
1
2
3
4
5
  | 
$ docker run --rm \
  -e PLUGIN_METHOD=post \
  -e PLUGIN_URL=http://hook.acme.com \
  -e PLUGIN_BODY=hello \
  acme/webhook
  | 
 
启动项目
如果你对创建插件感兴趣,我们建议使用我们的入门项目作为基础来启动开发。