ぴよ丸水産

週末ファゴッティストによる技術ブログ

【Jenkins】Webhookを設定してみる

はじめに

GitHub→JenkinsのWebhook連携を試してみたので、
手順メモ書きます。

Webhookとは?

JenkinsのGit連携の機能の一つです。
GitHub側にJenkinsのURLを登録して、
GitHub上で、プルリクやプッシュなどのアクションがあった時に、
登録したJenkinsのURLにPOSTリクエストを投げてくれる機能です。

f:id:blue-38:20190916125014p:plain
Webhookイメージ

JenkinsのGit連携の機能としては、
もうひとつ、SCMポーリングがあります。
こちらは、方向が逆で、
Jenkinsから指定したGitに対して定期的に問い合わせを行う機能です。

f:id:blue-38:20190916125144p:plain
SCMポーリングイメージ

Jenkins側の準備

APIトークンの準備

GitHubからJenkinsへHTTPリクエストを送るための、
APIトークンの準備をします。

[Jenkinsの管理]-[ユーザの管理]から、
任意のユーザを選択し、
f:id:blue-38:20190916125605p:plain f:id:blue-38:20190916212404p:plain [設定]を押下して、
f:id:blue-38:20190916195042p:plain APIトークンの[Add new Token]を押下、
[Generate]でAPIトークンを生成します。
この時出てくる文字列は忘れずにコピーします。
f:id:blue-38:20190916213845p:plain f:id:blue-38:20190916213726p:plain

ジョブの設定

GitHubと連携するジョブを作成し、以下の設定をします。

[ビルドのパラメータ化]にチェックをつけ、
文字列パラメータを追加し、「payload」と設定します。
f:id:blue-38:20190916210726p:plain

[ソースコードの管理]に連携するGitを登録します。

f:id:blue-38:20190916210826p:plain

ビルドトリガの「リモートからビルド」を選択し、
認証トークンに先ほど生成したトークンの名前を入力
f:id:blue-38:20190916211533p:plain

これで、Jeknins側のGitHubのHTTPリクエストの窓口が整います。

GitHubの設定

GitHubリポジトリのページの[Setting]から、[Webhook]を選択します。
f:id:blue-38:20190916210947p:plain [Add webhook]を押下して、以下の情報を入力します。
f:id:blue-38:20190916211738p:plain

  • Payload URL:http://<ユーザ名>:<トークン>@/job/<ジョブ名>/buildWithParameters?token=<トークン名>
    • ユーザ名:Jenkinsのトークンを生成したユーザ名
    • トークン:生成したトークンの内容(32桁の数字)
    • Jenkins URL:ポート番号も指定している場合はそこまで記載
  • Content type:type:application/x-www-form-urlencoded
  • Which events would you like to trigger this webhook?:Just the push event
  • Active:チェックオン

f:id:blue-38:20190916212047p:plain 入力したら、[Add Webhook]ボタンを押下します。

ここまでできれば、
試しにGitHubに対してPushとかしてみれば、
連動してJenkinsジョブのビルドが動いてくれるのが確認できます。

まとめ

GitHubへのアクションをJenkinsジョブのビルドのトリガとする場合の手順でした。
Webhookにしても、SCMポーリングにしても、
JenkinsをCI/CDツールとして活用するためには、有用な機能だと思います。

実機で調べてたの1か月以上前の話でしたが、(汗)
自分のVPSに環境が残ってました。奇跡!