Example Go Plugin

This guide provides a brief tutorial for creating a webhook plugin, using the Go programming language, to trigger http requests during the build pipeline. The below example demonstrates how we might configure a webhook plugin in the Yaml file:

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

Create a Go program that makes an http request using the Yaml configuration parameters, which are passed to the program as environment variables in uppercase, prefixed with PLUGIN_.

package main

import (

func main() {
  body := strings.NewReader(

  req, err := http.NewRequest(
  if err != nil {

Compile your binary on the host machine for the target platform. Compiling on the host machine and adding the binary to the image is considered a best practice because it reduces the overall image size.

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

Create a Dockerfile that adds your compiled binary to the image, and configures the image to run your binary as the main entrypoint.

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

Build and publish your plugin to the Docker registry. Once published your plugin can be shared with the broader Drone community.

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

Execute your plugin locally from the command line to verify it is working:

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

Is there a mistake on this page? Please let us know or edit this page.