Drone CI 中文文档

Go 插件示例

本指南提供了一个简短的教程,用于创建一个 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

启动项目

如果你对创建插件感兴趣,我们建议使用我们的入门项目作为基础来启动开发。