Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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コミット通知が流れてくるようになると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした