以前ひそかに Bitbucket 上で Pull Request 作成やコメントをしたとき、任意の Chatwork グループチャットに通知するツール を作ったのですが、Slack チャットへの投稿にも対応しました。
上の画像が実際に Slack に通知されている場面のキャプチャ画像です。
最初は Slack 標準の外部サービス連携(Integration)でやればいいじゃん、と思ったのですが、世の中そんなに甘くなく、現状だと Bitbucket のプルリクエストの通知をサポートしていないようなのでそれを行うための補助ツールになります。
リポジトリは以下になります。
以下、つらつらと概要を書いていきます。
README.md に書いている内容とほぼ同じです。
対応しているチャットサービス
- Slack
- Chatwork
サポートしている通知の種類
次のプルリクエストに関するアクションをしたときにチャットへ通知されます。
- プルリクエストの作成
- プルリクエストのマージ
- プルリクエストの更新
- プルリクエストの取り下げ
- プルリクエストに対してのコメント
簡単な通知フロー
- Bitbucket 上でプルリクエストの作成やマージなどを行う
- Bitbucket から指定した任意のサーバに対して hook post が飛ぶ
- 任意サーバ上のアプリケーション(今回のツール)が post を受け取り、任意のチャットサービスに通知メッセージをポスト
必要なもの
- PHP 5.3+ (with cURL & composer)
- Chatwork の API トークン (Chatwork に通知する場合)
- Slack の API トークン (Slack に通知する場合)
- トークンは Slack API のページで発行できます。
- Bitbucket のリポジトリ (要 Admin 権限)
インストール方法
- Github からソース一式ダウンロード
- 任意サーバにソースアップロード
- パーミッションの修正
chmod -R 777 tmp
- 設定ファイルの配置と設定
- Chatwork の場合:
cp config/chatwork.json.default config/chatwork.json
vim config/chatwork.json
- Slack の場合:
cp config/slack.json.default config/slack.json
vim config/slack.json
- Chatwork の場合:
- Composer で必要プラグインインストール
composer install
- Bitbucket のリポジトリ設定から Pull Request POST の hook url 設定
- Chatwork の場合の例:
- http://example.com/bitbucket_event_notification/gateway.php?destination_service=chatwork&room_id=1000000000
- Slack の場合の例:
- http://example.com/bitbucket_event_notification/gateway.php?destination_service=slack&room_id=C1234567890
- Chatwork の場合の例:
gateway.php が受け付ける GET パラメータ一覧
キー | 説明 | Chatwork の場合の値の例 | Slack の場合の値の例 |
---|---|---|---|
destination_service | 通知先チャットサービス | chatwork | slack |
room_id | 通知先のチャットルームID (チャンネル) | 1000000000 | #bitbucket, C1234567890 |
- room_id の指定に # が含まれる場合は URL エンコードが必要
- 例:
#bitbucket
->%23bitbucket
- 例:
個人的な事情など
普段メインで使うチャットが Chatwork から Slack に変わった関係で Chatwork のほうの動作確認が手薄になってます。もし不具合などあればコメント or PR お待ちしてます。
また、プルリクエストのマージ、更新、取り下げの際に Pull Request へのリンクが無いのは仕様となっています。Approve / UnApprove の hook request に至っては、「どれかのプルリクエストに対して Approve / UnApprove された」という情報しか分からないという謎仕様になっていて、あえて通知の実装をしていません :(
Bitbucket アカウントを持ってる人は是非 issue にアクセスして vote をぽちっとお願いしますw
site / master / issues / #8340 – Pull Request POST hook does not include links to related objects (BB-9535) — Bitbucket
2015/08/19 03:19 – リポジトリの url が変更になったため更新しました。