LoginSignup
19
16

More than 5 years have passed since last update.

Subversionのコミット通知をbashとcurlを使ってSlackのチャンネルに流す

Last updated at Posted at 2015-07-27

概要

Subversionのコミット通知をSlackに長そうとしたけど、bashと最小限のコマンドだけで実現したかったので、Subversionのhooks用シェルを作ってみたときの覚え書きです。
本来ならHubotを使って連携をするのが今風だと思うのですが、node.js環境を勝手に構築出来ない状況だったので、node.js環境を構築することに問題がなければHubotを利用すべきだと思います。

Slackの準備

1.「Configure Integrations」を選択する

ConfigureIntegrations.png

2.「Incoming WebHooks」を選ぶ

IncomingWebHooks.png

3. 通知をするためのチャンネルを選択し、「Add Incoming WebHooks Integration」を押す(今回は#svn-test)

PostChannel.png

4. WebHookURLが発行される

WebhookUrl.png

Subversionの準備

1. post-commitの配置

リポジトリに「hooks」ディレクトリがあるので、そこにpost-commitを配置します。(実行権限を付けるのを忘れずに)
「Slack Setting」と「SVN Setting」の設定を環境に合わせて下さい。

post-commit
#!/bin/sh

export LANG=ja_JP.UTF-8

REPOS="$1"
REV="$2"
TXN_NAME="$3"

# ------------------------------
# Slack Setting
# ------------------------------
# 通知するSlackのチェンネルを書く(プライベートグループの時は「#」は不要)
channel="#svn-test"
# 通知するときのユーザ名
username="svn"
# 通知するユーザのアイコン
iconemoji=":shell:"
# WebHookURL(環境に合わせて下さい。)
webhookUrl="https://hooks.slack.com/services/XXXXXXXXX"

# ------------------------------
# SVN Setting
# ------------------------------
# Subversionのリポジトリのベースディレクトリ(環境に合わせて下さい。例:/home/svn/repos)
baseRepository="/home/svn/repos"
# Subversionのリポジトリ名(環境に合わせて下さい。例:svn-test)
repositoryName="svn-test"
# Subversionのリポジトリ
repository=$baseRepository/$repositoryName
# コミットしたAuthorを取得
author=$(/usr/bin/svnlook author -r $REV $repository)
# コミットメッセージを取得
commit_msg=$(/usr/bin/svnlook log -r $REV $repository | tr '\n' '\\' | sed 's/\\/\\n/g')
# コミットサマリーを取得
commit_summary=$(/usr/bin/svnlook changed -r $REV $repository | tr '\n' '\\' | sed 's/\\/\\n/g')
# コミット通知するときのヘッダ
header="New commit:"
# コミット通知するときにボディ(commit_summaryとか不要だったら省く)
value="Revision:$REV\n$commit_msg\n$commit_summary"

# Slackに通知
/usr/bin/curl -X POST --data-urlencode "payload={\"channel\": \"${channel}\", \"username\": \"${username}\", \"text\": \"${header}\", \"attachments\": [{ \"fallback\": \"${header}\", \"color\": \"good\", \"fields\": [{\"title\": \"${author}\", \"value\":\"${value}\"  }]  }], \"icon_emoji\": \"${iconemoji}\"}" ${webhookUrl}

これで、コミットするとSlackにSVNコミット通知が流れてくるようになると思います。

19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16