Goプラグインの例
このガイドでは、ビルドパイプライン中にhttpリクエストをトリガーするために、Goプログラミング言語を使用して ウェブフックプラグインを作成するための簡単なチュートリアルを提供します。以下の例は、Yamlファイルで ウェブフックプラグインを構成する方法を示しています。
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: webhook
7 image: acme/webhook
8 settings:
9 url: http://hook.acme.com
10 method: post
11 body: |
12 hello world
Yaml構成パラメーターを使用してhttpリクエストを行うGoプログラムを作成します。このパラメータは、PLUGIN_ で始まる大文字の環境変数としてプログラムに渡されます。「プラグイン入力」に詳細があります。
1 package main
2
3 import (
4 "net/http"
5 "os"
6 )
7
8 func main() {
9 body := strings.NewReader(
10 os.GetEnv("PLUGIN_BODY"),
11 )
12
13 req, err := http.NewRequest(
14 os.GetEnv("PLUGIN_METHOD"),
15 os.GetEnv("PLUGIN_URL"),
16 body,
17 )
18 if err != nil {
19 os.Exit(1)
20 }
21 }
ターゲット プラットフォームのホストマシンでバイナリをコンパイルします。ホストマシンでコンパイルしてバイナリをイメージに追加すると、イメージ全体のサイズが小さくなるため、ベストプラクティスと見なされます。
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o webhook
コンパイルしたバイナリをイメージに追加する Dockerfile を作成し、バイナリをメインエントリポイントとして実行するようにイメージを構成します。
1 FROM alpine
2 ADD webhook /bin/
3 RUN apk -Uuv add ca-certificates
4 ENTRYPOINT /bin/webhook
プラグインをビルドしてDockerレジストリに公開します。公開されたプラグインは、幅広いDroneコミュニティと共有できます。
$ docker build -t acme/webhook
$ docker push acme/webhook
コマンドラインからプラグインをローカルで実行して、プラグインが機能していることを確認します。
$ docker run --rm \
-e PLUGIN_METHOD=post \
-e PLUGIN_URL=http://hook.acme.com \
-e PLUGIN_BODY=hello \
acme/webhook
プラグイン テンプレート
プラグインの作成を容易にするために、テンプレートを使用してプラグインを作成します。プラグインの作成にはツール Boilr を使用します。
デフォルトのプラグイン テンプレートはここにあり、より複雑なコミュニティ バージョンも利用できます。