Slackへのプルリクエスト通知に対応しました

以前ひそかに Bitbucket 上で Pull Request 作成やコメントをしたとき、任意の Chatwork グループチャットに通知するツール を作ったのですが、Slack チャットへの投稿にも対応しました。

上の画像が実際に Slack に通知されている場面のキャプチャ画像です。

最初は Slack 標準の外部サービス連携(Integration)でやればいいじゃん、と思ったのですが、世の中そんなに甘くなく、現状だと Bitbucket のプルリクエストの通知をサポートしていないようなのでそれを行うための補助ツールになります。

リポジトリは以下になります。

以下、つらつらと概要を書いていきます。
README.md に書いている内容とほぼ同じです。

対応しているチャットサービス

  • Slack
  • Chatwork

サポートしている通知の種類

次のプルリクエストに関するアクションをしたときにチャットへ通知されます。

  • プルリクエストの作成
  • プルリクエストのマージ
  • プルリクエストの更新
  • プルリクエストの取り下げ
  • プルリクエストに対してのコメント

簡単な通知フロー

  1. Bitbucket 上でプルリクエストの作成やマージなどを行う
  2. Bitbucket から指定した任意のサーバに対して hook post が飛ぶ
  3. 任意サーバ上のアプリケーション(今回のツール)が post を受け取り、任意のチャットサービスに通知メッセージをポスト

必要なもの

  • PHP 5.3+ (with cURL & composer)
  • Chatwork の API トークン (Chatwork に通知する場合)
  • Slack の API トークン (Slack に通知する場合)
    • トークンは Slack API のページで発行できます。
  • Bitbucket のリポジトリ (要 Admin 権限)

インストール方法

  1. Github からソース一式ダウンロード
  2. 任意サーバにソースアップロード
  3. パーミッションの修正
    • chmod -R 777 tmp
  4. 設定ファイルの配置と設定
    • 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
  5. Composer で必要プラグインインストール
    • composer install
  6. 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

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 が変更になったため更新しました。

PullRequestされたときChatworkに通知されるようにしてみた

Bitbucket 上で Pull Request やコメントをしたとき、任意の Chatwork グループチャットにポストしてくれるツールを作りました。

ソースは Github に。(Bitbucket 用のツールだけど)
https://github.com/ymm1x/BitbucketEventNotification

通知投稿されるタイミング

  • Pull Request を作成したとき
  • Pull Request にコメント、返信したとき(コードレビュー)
  • Pull Request を取り下げたとき
  • Pull Request をマージしたとき

通知表示のサンプル
(通知表示の例ですが一部塗りつぶしてあります。)

あまり多くの機能はつけていないので、運用してみつつ気が向いたときに欲しい機能を付け足していこうと思っています。

使用 API

作った経緯とか開発サイクルとか

今の携わっているプロジェクトでは A successful Git branching model に近いブランチ運用モデルを採用していて、ざっくり、以下のようなサイクルで開発しています。

  1. 開発用ブランチで開発やコード修正を行う
  2. Pull Request を作成し他のエンジニアがコードレビュー
  3. Pull Request の承認数 (Approval) が一定数に達したらメインブランチにマージ(祝)

最近の開発現場では割とありがちな流れだと思いますが、これまでの業務では開発が一段落して Pull Request を作成したことをチャットで毎回他のメンバーに知らせてレビューしてもらって…という流れがあったので、この流れをスムーズにできないかと思って作りました。

ちなみにこのツールは許可より謝罪な感じで、欲しいと思ってから上長に許可をとらずに作りました>< 最近、あったほうが便利だと思うものはすぐに作り始めるようにしています。

今日から実際に業務で使い始めてみてますが、便利ならそのまま使われるし、そうじゃなければ使われなくなるだけということで。

HipChat + hubot とかならもっと楽に実現できるのかな?

2015/08/19 03:21 – リポジトリの url が変更になったため更新しました。