Slackに通知する用シェルスクリプト


はじめに

アプリケーションのデプロイが完了したことをSlackに通知するためのシェルスクリプトを作りました。

本記事の例では、以下のような通知がSlackに来ます。

手順

Slack設定

Slack APIのIncoming Webhooksの機能が一番シンプルだとわかったので利用しました。

上記リンクの箇所にてStep1~3をすれば、対象のワークスペースのチャネルへと通知するAPIを叩くためのURL(下記スクリプトの${SLACK_WEBHOOK_URL}にあたる)が得られ、準備OKになります。

シェルスクリプトの作成

上記通知の例では以下のスクリプトを利用しています。

#!/bin/bash

set -eu

# gen_post_dataで使われる。チェックアウト中のブランチ名をもとにデプロイ対象環境を返す。
get_deploy_env()
{
  branch_name=$(git symbolic-ref --short -q HEAD 2>/dev/null)
  if [ "$branch_name" = "master" ]; then
    echo "Prod"
  elif [ "$branch_name" = "develop" ]; then
    echo "STG"
  else
    echo "error current branch is invalid"
    exit 1
  fi
}

# Slack Webhook IncomingのAPIへの通知メッセージ用のJSONを作る。
gen_post_data()
{
  service="my-service"
  env=$(get_deploy_env)      # ex: STG
  orgpath=$(git remote get-url origin | awk -F "@" '{print $2}') # ex: github.com/username/my-service
  hash=$(git rev-parse HEAD) # ex: a5e28da048e8eed21a77ec7c15037018
  cat <<EOF
{
    "blocks": [
        {
            "type": "section",
            "text": {
                "type": "mrkdwn",
                "text": "*${service}* has been deployed to *${env}*\nDeployed commit hash: <https://${orgpath}/commit/${hash}|${hash}>"
            }
         }
    ]
}
EOF
}

# 作ったメッセージを付けてSlack Webhook IncomingのAPIを叩く。
curl -i -H "Content-type: application/json" -s -S -X POST -d "$(gen_post_data)" "${SLACK_WEBHOOK_URL}"

参考