みなさん、こんにちは。中村です。

GWも終わり、サブタスク機能を始めとした次回のリリースに向けて、テストユーザの方のご協力のもと、日々開発を進めております。きっと満足ができるものを提供できるかと思いますので、乞うご期待ください。

さて、今日は4月初めのリリースで提供した、Git Webフックについて紹介します。

Webフックの概要

Webフックとは、Gitのpushをトリガーとして予め設定しておいたURLにpush時の情報をポストする機能です。GithubBitbucketにはすでに導入されているので、概要についてはご存知の方も多いでしょう。Webフックを使うと、ソースコード管理と紐付けて他システムとの連携を行うことができます。

詳細については、こちらのヘルプも参照してください。

 

webhook

 

活用例:JenkinsへのPush通知

ここでは、エンジニアにとって一番活用頻度が高いのではと思われる、JenkinsとWebフックの連携について、設定例を紹介します。
 
Webフックを活用するには、Jenkins Git Pluginをインストールしておく必要があります。こちらをインストールした後は、下記の画面を参考にWebフックを設定してください。WebフックのURLは、下記の形式になります。
  • http://<Jenkinsサーバ>/git/notifyCommit?url=<GitリポジトリのURL>

webhook_jenkins 続いて、Jenkins側の設定です。なお、Gitリポジトリの設定はWebフックを使わない場合と同じなので、ここでは割愛させていただきます。 ビルド・トリガの設定で、"SCMをポーリング" にチェックを入れておきます。スケジュールの項目は必要ないので、何も記載しなくても構いません(画面キャプチャ上では、他の人がこの設定を見たときのためにコメントを残していますが)。 なお、Git Pluginの仕様上、スケジュールには何も必要ありませんが、ポーリングのチェックは設定しておく必要があります。 webhook02

なお、JenkinsにはGit Pluginを使わずとも標準の機能で、ジョブの特定のURLを叩けばビルドすることができます( http://<Jenkinsサーバ>/job/<ジョブ名>/build など )。ただし、セキュリティの設定がかかっているJenkinsに対しては、認証情報などを含める必要が出てきます。
 
上述しているGit Pluginが提供する "git/notifyCommit" を含んだURLを使用すると、認証がかかっているJenkinsに対しても、認証情報などを含める必要はありません。詳細は、Git Pluginのドキュメント Push notification from repositoryを参照してください。
 

Webフックを実装しようと思い立ったきっかけ

Webフック機能を実装しようというきっかけになったのは、あるタイミングからJenkinsからのgit clone/pullが失敗しだしたことからです。  当初は頻度も少なく必ず再現するというわけでもなく、以下のログのように接続に失敗しているだけのように見えたので、一時的な問題としてスルーしていましたが、それが段々無視出来ないレベルになってきました。
 

そこで詳細を調査したところ、なんと!サーバ側の同時アクセス数制限に引っかかっていた事が判明したのです。Backlog の Git リポジトリにアクセスする Jenkins のジョブが増えるにつれて、ポーリングによる同時アクセスが規定の回数を超えていたのでした。

さて、原因は特定できました。手軽な回避策としては、ポーリングの間隔やタイミングを調整することでしょう。しかし、それでは、問題を先送りしているだけですし、他のユーザが同様の問題に直面する可能性も残ってしまいます。

上記の事情を踏まえて、Git Webフック機能を実装することを決断しました。

Webフックにより、同時アクセス数の制限に引っかからなくなりました。また、ポーリングの時とは違い、git pushしてすぐにJenkinsのビルドが走るので、よりフィードバックを得やすくなりました。

以上、Git Webフックについての活用例と、開発裏話をお送りしました。

Webフックは、上記で例示したJenkinsとの連携に限らず、様々な活用の仕方があるかと思います。「うちではこんな風に活用してるよ」というのがあれば、ぜひお聞かせください!