しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Backlog が Basic 認証付きの Webhook に対応したので Kudu をカスタマイズしてみた

Azure Web サイトで Git リポジトリを作成すると、管理ポータルに Git リポジトリの URL とデプロイの開始 URL という項目が追加されます。

f:id:shiba-yan:20141202114857p:plain

名前の通り、この URL に適切なリクエストを投げれば、Kudu が自動的に変更をフェッチしてデプロイしてくれる仕組みになってます。

と言っても、普段は Git の URL だけ使ってデプロイの開始 URL は放置と言うのが多いと思うのですが、このデプロイの開始 URL は GitHub や CodePlex などの管理ポータルから連携できるサービスで使われてます。要するにプッシュなどをしたタイミングで実行される Webhook 用ですね。

f:id:shiba-yan:20141202120751p:plain

そして自分がよく使っている Backlog でも Git の Webhook に対応しているので組み込もうとしたのですが、Basic 認証に非対応だったので諦めていました。

BASIC 認証 のかかったサーバへの Web フックを利用したい – Customer Feedback for Backlog

しかし、昨日に Backlog で Basic 認証付きの Webhook に対応したと知ったので、早速 Kudu を弄って対応コードを入れてみました。

GitHub にてコードは公開してあります。

add backlog git support. · 5da601a · shibayan/kudu · GitHub

このソースをビルドして、Web サイトにデプロイすれば動くようになります。Private な Kudu に関しては No.1 の以下の記事が参考になります。

Windows Azure Web Sitesの魅力を120%引き出す « ブチザッキ

気になる認証に関しては、内部的に SSH を使うようにリポジトリの URL を挿げ替えています。なので Kudu の REST API を使って SSH key を作成して、更に Backlog 側に公開鍵を登録する必要があります。

https://<sitename>.scm.azurewebsites.net/api/sshkey?ensurePublicKey=1

この URL を叩くと、秘密鍵を作成してユーザーには公開鍵を返してくれます。

後は Backlog 側に Webhook を設定して、プッシュすれば自動デプロイが走ります。

f:id:shiba-yan:20141202114449p:plain

アイコンに関しては管理ポータル側で対応するしかないので諦めました。でも、デプロイ元として Backlog と表示されていて、デプロイにも成功しているのが分かりますね。

Kudu のデプロイ開始 URL の実装

Kudu では GitHub や CodePlex などの各サービス毎に ServiceHookHandler を実装しています。

f:id:shiba-yan:20141202121018p:plain

それぞれの ServiceHookHandler の内部では、Webhook から渡された payload をパースして、Kudu がデプロイを行うのに必要な DeploymentInfo を作っていきます。つまり、適切な DeploymentInfo を作って返してしまえば、後は Kudu が面倒を見てくれます。

なので、今回追加した BacklogHandler でも Backlog の Webhook 仕様書を読みながら、同じように DeploymentInfo を作って返す処理を追加しただけです。

Git Webフック | Backlogを使いこなそう | Backlog [バックログ]

ちなみに管理ポータルからの登録はかなり難易度が高いというか、そこは中の人にやってもらうしかないので望み薄です。でも、ローカル Git リポジトリでも使えないことは無いので、これで良いかなとも思います。