slackにメッセージをpostするシェル - 日報 #138
何でもかんでもslackにぶち込みやがって!
でもそれでいい〜んです。
今日はそんな話。
Notification系の情報はもうSlackに集約していいと思います。
なんせ便利だし。
ということなので、まずbashでslackポストが出来るようなシェルを手元にもっておきます。
すごい気が楽になりますよね。
ということでまず、slackでpostするシェルスクリプトを。
理想はこんな感じで呼び出せるように。
echo "Body Message" | ./slack_post.sh -c Hoge_channel -u Post_user -m "Header message"
要はシェルの結果をパイプで貰うshスクリプトがあって、
-c でチャンネル名、 -u でポストユーザ名、 -m でヘッダーメッセージ、
シェルの結果がポストの内容、
こんな感じで使えたら超便利ですね。
結果こんな感じに。
#! /bin/bash set -eu CHANNEL="def_channel" # DONOT USE '#' USERNAME="slack_post_shell" MESSAGE="TEST" HOOKS_URL="https://hooks.slack.com/services/XXXXX" for OPT in $* do case $OPT in '-c' ) CHANNEL=$2 shift 2 ;; '-u' ) USERNAME=$2 shift 2 ;; '-h' ) HOOKS_URL=$2 shift 2 ;; '-m' ) MESSAGE=$2 shift 2 ;; esac done # slackのために無理やり\nを出力させる MESSAGEFILE=/tmp/webhooks rm ${MESSAGEFILE} if [ -p /dev/stdin ] ; then cat - | tr '\n' '\\' | sed 's/\\/\\n/g' > ${MESSAGEFILE} fi POST_MSG="${MESSAGE}\n"`cat ${MESSAGEFILE}`'\n' curl -X POST --data-urlencode "payload={\"channel\": \"#${CHANNEL}\", \"username\": \"${USERNAME}\", \"text\": \"${POST_MSG}\"}" ${HOOKS_URL} 1>/dev/null 2>&1
うーん、tmpのところが若干不安だから$mktmpみたいなの使うといいかもしれないが、よく知らないので放置。
基本的にはcat - で受け取ったものをtmpファイルに保存して、という無駄経由をしているのは、sedコマンドが
unterminated substitute in regular expression
を吐き出しちゃうからです。
このへんとか参照
この方が楽なんすよね。
改行をなんとかうまく変換する方法ってないんすかね。。。
さて、これでおくれるようになりました。
あとはデプロイツールの最後に吐くなりなんなり、自由にしたらんかい!
という感じです。
便利ですね。