AWS CodeBuild から Mattermost へ通知させる機会があったので、その方法についての備忘録として残しておきます。

AWS CodeBuild の環境変数 MattermostWebhookURLMattermostIncomming Webhook URLを保持しておきます。また、IAM から CodeBuild のロールに AmazonSSMReadOnlyAccessの権限を与えてください。

MattermostIncomming Webhook URLの発行は、Mattermost 上で Account Settings → Integrations → Incoming Webhooks から出来ます。

下記ファイルが、実際の設定内容です。[~] 部分は、適宜変更してください。

codebuild-to-mattermost.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

# 使用例
# chmod +x codebuild-to-mattermost.sh
# gradle clean build &> build-message.txt
# ./codebuild-to-mattermost.sh build-message.txt [Mattermostへ通知するためのWEBHOOK_URL]

# 設定項目---------------

# 通知するチャンネル
CHANNEL="[#通知するチャンネル]"

# 対象のリポジトリ
SRC_DIR="[ビルド対象のリポジトリ]"

#------------------------

# build結果が入ったテキストファイルを第1引数から受け取る。
BUILD_RESULT_FILE=${1}

# Mattermostに通知するためのWebHookのURLを第2引数から受け取る。
WEBHOOK_URL=${2}

# Pushしたユーザ(gitのコミット履歴から取得する。)
USERNAME=`git log | head -3 | grep "Author:" | awk '{print $2}'`

# CodeBuildのAmazon Resource Name(どのビルドなのかを特定する情報)
BUILD_ARN=`echo ${CODEBUILD_BUILD_ARN} | awk -F ":" '{print $NF}'`
# CodeBuildのビルド履歴ページのURLを参考にしてください。
BUILD_ARN_URL='https://console.aws.amazon.com/codesuite/codebuild/projects/[Codebuildのプロジェクト名]]/build/[CodeBuildのプロジェクト名]%3A'${BUILD_ARN}'/log?region=[CodeBuildプロジェクトのリージョン]'

# Pushされたブランチ
BRANCH=`echo ${CODEBUILD_WEBHOOK_TRIGGER}`

# ビルド結果を${BUILD_RESULT_FILE}から取得する
BUILD_RESULT=`cat ${BUILD_RESULT_FILE} | grep -e "BUILD FAILED" -e "BUILD SUCCESSFUL"`

# Mattermostへ通知するための文字列を組み立てる。
MESSAGE=${SRC_DIR}' [#BUILD_ARN]('${BUILD_ARN_URL}') of '${BRANCH}' by '${USERNAME}'\n```\n'${BUILD_RESULT}'\n```'

# 上記設定値に基づき、mattermostへ通知する。
curl -X POST --data-urlencode 'payload={"channel": "'"${CHANNEL}"'", "username": "'"${USERNAME}"'", "text": "'"${MESSAGE}"'"}' $WEBHOOK_URL

buildspec.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11

  pre_build:
    commands:
      - chmod +x ./gradlew
      - chmod +x ./codebuild-to-mattermost.sh

  build:
    commands:
      - ./gradlew clean build &> build-message.txt

  post_build:
    commands:
      - ./codebuild-to-mattermost.sh build-message.txt ${MattermostWebhookURL}

Mattermost への通知 Sample

sample_repo #BUILD_ARN of branch/master by takuto_n
BUILD SUCCESSFUL in 18 secs