2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

slackへの通知をおこなうshell script

Posted at

はじめに

Slackへの通知をshell scriptで実行する方法を記載しています
難しいことは何もしていませんが、低リスク低コストで何かしらの通知機能を実装しようというときに参考になるかもしれません

実行結果

  • 実行
# 1回目
bash notify_via_slack.sh
# 2回目
bash notify_via_slack.sh "this message." WARN "my user" ":ram:"
  • 出力
    image.png

実装内容

  • コアはこの部分
# Call Slack API
res=`curl -m 60 -sS -X POST ${WEBHOOKURL} --data-urlencode \
    "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${USERNAME}\", \"text\": \"${TEXTLINE}\", \"icon_emoji\": \"${ICON}\"}"`
exit $?
  • 全量
#!/bin/bash
# Load Slack config
CONFIG_FILE="./slack.config"
if [ ! -f "${CONFIG_FILE}" ]; then
  exit 1
fi
source ${CONFIG_FILE}

# Arguments
TEXTLINE=$1
LEVEL=$2
USERNAME=$3
ICON=$4

# Check Arguments
if [ -z "${TEXTLINE}" ]; then
  TEXTLINE="Please input \$1:string of notify slack message"
fi
if [ -z "${LEVEL}" ]; then
  LEVEL="INFO"
fi
if [ -z "${USERNAME}" ]; then
  USERNAME="notify user"
fi
if [ -z "${ICON}" ]; then
  ICON=":rotating_light:"
fi

# Check Alert Level
if [ "${LEVEL}" != "INFO" -a "${LEVEL}" != "WARN" -a "${LEVEL}" != "ERROR" ]; then
  echo "Please input \$2:string of notify level(INFO/WARN/ERROR)"
  exit 2
fi

USERNAME=${USERNAME}'('${EXEC_ENV}/${REGION}')'
TEXTLINE=${LEVEL}' : '${TEXTLINE}
if [ "${LEVEL}" != "INFO" ]; then
  TEXTLINE='<!channel> \n'${TEXTLINE}
fi

# Call Slack API
res=`curl -m 60 -sS -X POST ${WEBHOOKURL} --data-urlencode \
    "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${USERNAME}\", \"text\": \"${TEXTLINE}\", \"icon_emoji\": \"${ICON}\"}"`
exit $?

使用手順

通知先のSlackワークスペースの準備

Slackに関する操作は調べてください、以下の2つのことをおこないます

  • slackのワークスペースに投稿先のチャンネルを用意する
  • slackでIncomming Webhookのアプリを作成する

configファイルの作成

slack.configファイルを同じパスに作成します

  • REGION,EXEC_ENV
    どこで実行したかがわかるように指定します(クラウド利用で開発環境や本番環境の複数ある想定です)
  • CHANNEL
    Slackの投稿先を指定します
  • WEBHOOKURL
    Slackのアプリを作成すると取得できますのでここに指定します
REGION=tokyo-region
EXEC_ENV=dev
CHANNEL="#xxxx"
WEBHOOKURL=https://hooks.slack.com/services/xxxxx/xxxxx/xxxx

スクリプトの実行

各引数に指定する内容は次のとおりです

  • $1 : 投稿するメッセージ
  • $2 : 通知の種類、INFO/WARN/ERRORのいずれかのみ指定が可能。INFO以外を指定すると@channelが付く
  • $3 : 投稿するアプリのユーザー名
  • $4 : 投稿するアプリのアイコン
bash notify_via_slack.sh "this message." WARN "my user" ":ram:"

さいごに

一度の投稿で大量の文字列を送ろうとすると途中で切れてしまいますのでご注意ください
使っていただけたら嬉しいですが、利用される際はご自身の責任のもとご利用ください

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?