AWS CodeBuild から Mattermost へ通知させる機会があったので、その方法についての備忘録として残しておきます。
AWS CodeBuild の環境変数 MattermostWebhookURL
にMattermost
のIncomming Webhook URL
を保持しておきます。また、IAM から CodeBuild のロールに AmazonSSMReadOnlyAccess
の権限を与えてください。
Mattermost
のIncomming 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