LoginSignup
12
13

More than 3 years have passed since last update.

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

Posted at

はじめに

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

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

スクリーンショット 2020-03-08 18.34.07.png

手順

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}"

参考

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13