KAZUPON研究室

SVN環境でファイルの更新をSlackへ通知する

バージョン管理ソフトを使っているとやっぱり更新通知は実装したくなるよね。

手順

svnサーバーにcurlをインストールする

まずは通知するデータのやりとりを行うためcurlをインストールしましょう。ターミナルで環境にログインした後以下の手順でインストールします。

パッケージリストの更新

sudo apt update

curlをインストールする

sudo apt install curl

インストール確認

 curl --version

SlackにIncoming Webhook をインストールする

Slackのアプリの追加から、Incoming Webhook アプリを追加し設定画面から通知を行いたいリポジトリのWebhook URLをメモしておきます。

Slackへ通知するためpost-commit を作成する

リポジトリのhooks フォルダにある post-commit.tmpl ファイルを複製してpost-commitとし、中身を書き換えます。

export LANG=ja_JP.UTF-8

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

# Slackのチェンネル名
channel="#proj-xxxx"
# 通知ユーザ名
username="SVN"
# 通知するユーザのアイコン
iconemoji=":shell:"
# WebHookURL
webhookUrl="Webhook のURLを入れてください"

#Docker 外からの確認用パス
svnlook_path="/usr/bin/svnlook"

author=$($svnlook_path author -r $REV $REPOS)
commit_msg=$($svnlook_path log -r $REV $REPOS | tr '\n' '\\' | sed 's/\\/\\n/g')
commit_summary=$($svnlook_path changed -r $REV $REPOS | tr '\n' '\\' | sed 's/\\/\\n/g')
header="1 new commit by ${author}  \n   ${commit_msg}"
value="$commit_summary"

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

動作確認

試しに適当なファイルに差分を作りファイルをコミットしてみます。

うまく動作しました。

Proudly powered by WordPress