Incoming WebHooksを使用して、GitBucketにpushしたり、pull request作成,pull requestをマージ,pull requestにコメント,issue作成等をした際にSlackのチャンネルに通知メッセージを投稿してみる

https://screener.io/img/docs/slack-incoming-webhooks.png

最近社内にPull Requestを導入しましたが、GitBucket上で何らかのアクション(push,pull request作成,pull requestをマージ,pull requestにコメント,issue作成等)をした際にSlackのチャンネルに通知を送れるようにしてみました。

Webhook URL(POSTするURL)の取得

SlackのHOMEでドメイン名の右にある↓マークをタップします
↓
Configure Integrationsをタップする
↓
All Servicesタブをクリック
↓
Incoming WebHooksをAddする
↓
通知をしたいチャンネルを選択して、Addする
↓
Webhook URLをコピーしておく

https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXのようになっていると思います。

こちらのURLにパラメーターをハッシュにして、json化したものをpayloadパラメーターとしてPOSTすれば、Incoming WebhooksがSlackの該当チャンネルに投稿してくれます。

Send a JSON string as the payload parameter in a POST request

GitBucketからアクセスできるサーバー上にファイルを配置する

ruby(Rails)の場合

github.com

※こちらのリポジトリをサーバー上の任意のディレクトリでcloneします。

  • WEBHOOK_URLの設定
export WEBHOOK_URL=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX

起動

$ git clone github.com/keiwt/slack-incoming-webhook-ruby.git
$ cd slack-incoming-webhook-ruby
$ gem install bundle
$ bundle installpath=vendor/bundle
$ bundle exec rails s -b 0.0.0.0

railsはインストールされている前提です。

  • GitBucketにPushした際に実行されるService Hooksを設定する
リポジトリのトップに行く
↓
Settings
↓
Service Hooks
↓
WebHook URLsにリポジトリにURLを入力
※http://example.com:3000/slack/incoming/
※詳細はconfig/routes.rbをご覧ください
↓
Add

push時

f:id:keiwt:20150414200326p:plain

pull request作成時

f:id:keiwt:20150414200347p:plain

pull request作成後にブランチにプッシュした時

f:id:keiwt:20150414200420p:plain

pull requestをcloseした時

f:id:keiwt:20150414200500p:plain

そもそも、Incoming Webhooksとは何なのでしょうか。

Incoming Webhooks are a simple way to post messages from external sources into Slack.
They make use of normal HTTP requests with a JSON payload,
which includes the message and a few other optional details described later.

Message Attachments can also be used in Incoming Webhooks
to display richly-formatted messages that stand out from regular chat messages.

なるほど、外部サービスからslackのチャットにメッセージを投稿したい場合に使用するものなのですね。 設定できる内容は以下の通りです。

f:id:keiwt:20141229163530p:plain