はじめに
AWS公式では Chatbotを利用してCodeBuildの結果をSlackに通知する 方法が紹介されています
これは簡単に正否結果だけをSlack通知をするには良いのですが、2022年8月現在、通知内容をカスタマイズする方法がありません。
運用的にブランチ名やGitハッシュの情報などが欲しかったため改善することにしました
図. 有効な情報が無いのでSlack通知を無視するようになるエンジニア
手順
SlackAPI用のWebHookUrlを発行する
Slack公式サイト を参照して、API実行用のWebHookUrlを発行します
Slack通知用スクリプトの作成
発行したWebHookUrlを使って通知用スクリプトを作成します
curlコマンドを叩いてるだけなので直接buildspec.ymlに埋め込んでも良いのですが、汎用性を持たせるためスクリプト化しました
使い方
$ scripts/send_slack_message.sh ${SLACK_HOOK_URL} ${SLACK_CHANNEL} "${MESSAGE}" ${BRANCH_NAME} ${GIT_HASH}
scripts/send_slack_message.sh
#!/bin/bash
SLACK_HOOK_URL=${1}
CHANNEL=${2}
OPTION_TEXT=${3}
BRANCH_NAME=${4}
GIT_HASH=${5}
RESULT=`curl -X POST --data-urlencode \
'payload={
"channel": "#'"$CHANNEL"'",
"username": "codebuild",
"text": "'"$OPTION_TEXT"'",
"attachments": [
{
"color": "good",
"fields": [
{
"title": "Project Name",
"value": "xxx-server",
"short": "true"
},
{
"title": "Branch Name",
"value": "'"$BRANCH_NAME"'",
"short": "true"
},
{
"title": "Git Hash",
"value": "'"$GIT_HASH"'"
}
]
}
],
"icon_emoji": ":aws:"
}' \
$SLACK_HOOK_URL`
echo $RESULT
パラメータストアにWebHookUrlを設定する
WebHookUrlはセキュアなデータのため、直接buildspec.ymlに埋め込むのはセキュリティ上推奨されません
そのためパラメータストアに格納して運用します
buildspec.ymlの調整
buildspec.yml内では簡単にパラメータストアの値やブランチ名、gitハッシュ値などを参照することが可能なので、
これをスクリプトに渡してSlack通知を行います
buildspec.yml
env:
parameter-store:
SLACK_HOOK_URL: "deploy_slack_hook_url"
...
post_build:
on-failure: ABORT
commands:
...
- |
# ビルドの最後に通知処理を追加
SLACK_CHANNEL='build_chat'
MESSAGE='CodeBuild XXX build state SUCCEEDED.'
BRANCH_NAME=${CODEBUILD_WEBHOOK_TRIGGER#branch/}
GIT_HASH=${CODEBUILD_RESOLVED_SOURCE_VERSION}
scripts/send_slack_message.sh ${SLACK_HOOK_URL} ${SLACK_CHANNEL} "${MESSAGE}" ${BRANCH_NAME} ${GIT_HASH}
参考URL
- https://dev.classmethod.jp/articles/codebuild-env/
- https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/build-env-ref-env-vars.html