Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@TakezawaHirokazu

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

概要

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

16
Help us understand the problem. What is going on with this article?
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
16
Help us understand the problem. What is going on with this article?