GitHubのWebhookでラズパイ上のJenkinsでPipelineを動かしたい
GitHubのWebhookではJenkinsが動いているサーバーを指定しないといけません。
しかし、自宅で動かしているラズパイを指定するには固定のグローバルアドレスを付与したり、やりたければドメイン名も設定したり面倒です。
特にルーターを設定して外部からの通信を許可しなきゃいけないので、セキュリティ的に自信がありませんでした。
そこで何かいい方法がないかと探していたら、GitHubが提供しているsmee.ioというサービスがあったので、JenkinsがWebhookを受け取るところまでの手順を書いていこうと思います。
Jenkinsのブログ1で紹介されていたので、こちらも参考にしていただければと思います。
smee.ioとは
公式サイト2に一言で書いてありました。
Webhook payload delivery service
Receives payloads then sends them to your locally running application.
Webhookを受け取ってローカルで動いているアプリケーションに送る届けるサービスらしいです。
smee.ioを使うとこんな感じで自宅のラズパイにWebhookのpayloadを送れます。
導入する
Jenkinsの設定
1.Dash Board > New Item でPipelineを選択する
適当な名前をつけてPipelineを選択してOKを押します。
2.Pipelineを設定する
- Build Triggersで「GitHub hook trigger for GITScm polling」を選択
- Pipelineで画像のように選択して、Repository URLにリポジトリのURLを入れる
smee.ioの設定
3.smeeサーバーのURLを発行する
https://smee.io/ で「Start a new channel」をクリックするとURLが発行されます。
後にそのURLにGitHubからWebhookを投げることになります。
4.smeeクライアントをラズパイにインストールする
$ npm install --global smee-client
で ラズパイにsmeeクライアントをインストールします
5.smeeクライアントを動かすためのユニットファイルを書く
systemdを使っていることを想定しています。これはどっちでもいいですがあると楽なので。
[Unit]
Description=foo
[Service]
Type=simple
ExecStart=/usr/local/bin/smee --url https://smee.io/<id> --path /github-webhook/ --port 8080
Restart=always
[Install]
WantedBy=multi-user.target
GitHubの設定
6.Webhookを送るURLを設定する
リポジトリを選んで、Settings > Webhook で3で生成したsmeeサーバーのURLを入れる。
これで設定は終わりです!
動かしてみる
pushしてWebhookが投げられると、3で作ったsmeeサーバーのURLでWebhookの履歴が見れます。
ここでWebhookが動いていることが分かるので便利。
また、JenkinsでPipelineが動いていることがわかります。
-
Jenkinsのブログ ここにほとんどやり方載ってます ↩