Go 插件示例

这个简单的教程使用 Go 语言来生成一个 Drone webhook 插件,在构建工作流中生成 http 请求。这个例子展示了如何使用 yaml 文件配置 webhook 插件:

pipeline:
  webhook:
    image: foo/webhook
    url: http://foo.com
    method: post
    body: hello world

新建一个 Go 程序来根据 yaml 配置参数来生成一个 http 请求,这些参数是使用前置字符串全大写 PLUGIN_ 的环境变量:

package main

import (
  "net/http"
  "os"
)

func main() {
  body := strings.NewReader(
    os.GetEnv("PLUGIN_BODY"),
  )

  req, err := http.NewRequest(
    os.GetEnv("PLUGIN_METHOD"),
    os.GetEnv("PLUGIN_URL"),
    body,
  )
  if err != nil {
    os.Exit(1)
  }
}

在宿主机器上编译程序为对应平台的二进制文件,编译程序后将对应二进制文件添加到镜像文件中可以减小 Docker 镜像体积,是最佳实践之一。

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o webhook

新建一个 Dockerfile 来将编译后的二进制文件到镜像中,并把这个程序作为镜像运行的入口。

FROM alpine
ADD webhook /bin/
RUN apk -Uuv add ca-certificates
ENTRYPOINT /bin/webhook

构建和发布镜像到 Docker registry。镜像发布后你的插件就可以被 Drone 社区的用户使用。

docker build -t foo/webhook .
docker push foo/webhook

在本地执行你的插件来确定你的插件的运行情况:

docker run --rm \
  -e PLUGIN_METHOD=post \
  -e PLUGIN_URL=http://foo.com \
  -e PLUGIN_BODY="hello world" \
  foo/webhook

这个网页有没有错误? 请让我们知道 或编辑 这个页面