git pull を Slack に通知

各サーバーで git pull コマンドが使われたときに Slack へ通知するようにしました。

ChatOps的には、 Slack から git pull できるようにしたかったですが、
Slack をチーム内で試験的に導入していることもあり、今回は控えめです。

git の クライアントサイドのフック機能を使いました。
デフォルトでは、git pull にフックするサンプルは用意されていないので新規でファイルを作成します。

Qiita にいい感じにまとめている記事がありました
Git hooksまとめ

実装

各サーバーに SSH接続

cd App/.git/hooks
vi post-merge

スクリプトはこんな風にしてみました。
channel に通知したいチャンネル名を指定します。
環境変数$APP_ENVにはサーバー名を入れています。
Slack の incomming webhook の APIキーは ↓ を参考に取得してください。
http://qiita.com/satoshi03/items/14495bf431b1932cb90b

#!/bin/bash
commitid=$(git log -1 --pretty=format:"%h" --branches)
commitmessage=$(git log -1 --pretty=format:"%s" --branches)
committer=$(git log -1 --pretty=format:"%an" --branches)
slack="https://hooks.slack.com/services/[SLACK-INCOMMING-WEBHOOK-API-KEY]"
channel="#test"

payload="payload={
  \"channel\": \"${channel}\",
  \"username\": \"${APP_ENV}\",
  \"attachments\": [
    {
      \"fallback\": \"git pull\",
      \"color\": \"#36a64f\",
      \"pretext\": \"git pull\",
      \"author_name\": \"${committer}\",
      \"title\": \"${commitid} - ${commitmessage}\",
    }
  ],
  \"icon_emoji\": \":warning:\"
}"
curl -X POST --data-urlencode "${payload}" "${slack}"

これで、git pull 実行時にslackに通知することができました。

スクリーンショット 2016-08-21 14.08.27

-Git塾