連載
» 2016年12月08日 05時00分 公開

WebhookやHubotを使ってチャットとSubversion、Redmine、Jenkinsを連携させる基本設定とはOSSチャット基盤RocketChat入門(終)(2/5 ページ)

[伴地慶介,三菱総研DCS]

Subversionのコミット情報をチャンネルに投稿するには

 実際に、Webhookを使ってRocketChatと他アプリケーションを連携してみましょう。まずは、Subversionと連携させて、Subversionのコミット情報をRocketChatのチャンネルに投稿します。

図9 RocketChat+Subversionの連携イメージ

 SubversionからRocketChatへのデータ送信にはcurlコマンドを使用し、データを送信するイベントとしてSubversionの「post-commitフック」を使用します。post-commitフックとは、Subversionにおいてコミットが実施され、新しいリビジョンが作られた後に実行される処理イベントです。

 今回はコミット情報としては「コミットユーザー」「リビジョン」「コミットメッセージ」「コミットのサマリー」を使うこととします。

 以下、RocketChat+Subversion連携の設定の流れを記載します(カッコ内は設定対象のソフトウェア)。

【1】Webhook URLの作成(RocketChat)

 まず、Subversionからデータを受信するためのWebhook URLを作成します。作成方法は前述した通りですが、ここでは「#subversion」というパブリックチャンネルに投稿されるように設定しています。

図10 Subversionと連携させるWebhook URLの作成その1

図11 Subversionと連携させるWebhook URLの作成その2

【2】post-commitフックを作成(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}
{REPOS}/hooks/post-commit

 作成したら、実行権限を付与します。

# chmod 755 ${REPOS}/hooks/post-commit

実行結果

 以上で設定は完了です。Subversionへコミットを行うと、RocketChatの「#subversion」チャンネルに以下のようなコミット情報が通知されるので、試してみてください。

図12 Subversionのコミット情報をチャンネルに通知

Tips FirewallとSELINUXの無効化について

 FirewallおよびSELINUXが有効になっていると、受信側でWebhookのデータを受信できないことがあります。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。