実際に、Webhookを使ってRocketChatと他アプリケーションを連携してみましょう。まずは、Subversionと連携させて、Subversionのコミット情報をRocketChatのチャンネルに投稿します。
SubversionからRocketChatへのデータ送信にはcurlコマンドを使用し、データを送信するイベントとしてSubversionの「post-commitフック」を使用します。post-commitフックとは、Subversionにおいてコミットが実施され、新しいリビジョンが作られた後に実行される処理イベントです。
今回はコミット情報としては「コミットユーザー」「リビジョン」「コミットメッセージ」「コミットのサマリー」を使うこととします。
以下、RocketChat+Subversion連携の設定の流れを記載します(カッコ内は設定対象のソフトウェア)。
まず、Subversionからデータを受信するためのWebhook URLを作成します。作成方法は前述した通りですが、ここでは「#subversion」というパブリックチャンネルに投稿されるように設定しています。
続いて、Subversionの「post-commit」フックを作成します。Subversionのリポジトリのルートディレクトリ(以下、${REPOS}と表記)にある「hooks」ディレクトリ配下に「post-commit」という実行ファイルを作成します。このファイルがコミット後に実行されます。
以下、今回作成する「post-commit」の内容を記載します。なお紹介するのは、あくまで一例ですので、投稿したい内容に応じて適宜カスタマイズしてください(※Webhook URLは自身の環境に合わせて指定してください)。
export LANG=ja_JP.UTF-8 REPOS="$1" REV="$2" TXN_NAME="$3" ####################### # RocketChat Settings # ####################### # RocketChatのチャンネル名(プライベートチャンネルの場合は「#」は不要) channel="#subversion" # ユーザー名 username="svn" # WebHookURL webhookUrl="http://〜 " ####################### # Subversion Settings # ####################### # コミットユーザー author=$(/usr/bin/svnlook author -r $REV $REPOS) # コミットメッセージ commit_msg=$(/usr/bin/svnlook log -r $REV $REPOS) # サマリー commit_summary=$(/usr/bin/svnlook changed -r $REV $REPOS) # 投稿内容(ヘッダー) text="New Commit by $author.\nRevision:$REV\nCommit Message:$commit_msg" # 投稿内容(ボディー) value="Commit Summary:$commit_summary" ####################### # RocketChatに通知 # ####################### /usr/bin/curl -X POST --data-urlencode "payload={\"channel\": \"${channel}\", \"username\": \"${username}\", \"text\": \"${text}\", \"attachments\": [{ \"title\": \"${REPOS}\", \"title_link\": \"http://localhost/svn/sample\", \"text\": \"${value}\", \"color\": \"#764FA5\" } ] }" ${webhookUrl}
作成したら、実行権限を付与します。
# chmod 755 ${REPOS}/hooks/post-commit
以上で設定は完了です。Subversionへコミットを行うと、RocketChatの「#subversion」チャンネルに以下のようなコミット情報が通知されるので、試してみてください。
FirewallおよびSELINUXが有効になっていると、受信側でWebhookのデータを受信できないことがあります。
Copyright © ITmedia, Inc. All Rights Reserved.