LoginSignup
0

More than 1 year has passed since last update.

CodeBuildの実行結果をブランチやGitハッシュ情報などを含めてSlackに投稿する

Last updated at Posted at 2022-08-08

はじめに

AWS公式では Chatbotを利用してCodeBuildの結果をSlackに通知する 方法が紹介されています
これは簡単に正否結果だけをSlack通知をするには良いのですが、2022年8月現在、通知内容をカスタマイズする方法がありません。

運用的にブランチ名やGitハッシュの情報などが欲しかったため改善することにしました

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f393436382f61623165633937322d643665342d313262612d366461652d6663663636373434366362612e706e67.png
  図. 有効な情報が無いので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

結果

スクリーンショット 2022-08-05 18.46.56.png
  図. 便利になって喜ぶエンジニア

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
0