BitriseからのSlack通知にBuildにかかった時間を表示させる
FlutterアプリのCI/CDをBitriseで組んでおり、Build完了後にSlack通知を飛ばすようにしています。
環境変数を利用することで通知情報にBuild番号やアプリ名などの情報を表示させることができます。
ただBitrise内のレポートで確認できるようなDuration
Total runtime
にあたるBuildにかかった時間を通知する環境変数は無さそうでした。
Flutterアプリ開発では特にiOS/Android両方のBuildを行うため、Buildにかかった時間が気になり毎回Bitrise内で確認していました。
また $BITRISE_BUILD_TRIGGER_TIMESTAMP
からBuild開始時のタイムスタンプを取得することはできますが、これをそのまま表示させてもタイムスタンプ文字列のためユーザーフレンドリーでない1970年1月1日からの秒数が表示されてしまいます。そのため日本時間に変換して表示させる必要があります。
開始時間
と 終了時間
がわかれば Buildにかかった時間
が出力できるだろうとすぐわかったものの 終了時間
の出力方法がわからず、またyamlの文法やシェルスクリプトにあまり親しんでいないため大変そうだなとしばらく放置していたのですが、以下の記事を参考に「対応できそう!」と思いやってみました。
1. Generate timestamps
$UNIX_TIMESTAMP
を出力し、後続Stepで使えるようにします。
2. Do anything with Script
タイムスタンプを加工して表示させるためにシェルスクリプトを実行したいので Generate timestamps Step の次に Do anything with Script step を追加します。
こちらでも Run if previous Step failed
項目にチェックをいれ、
# write your script here
のところに以下のスクリプトを記述します
# write your script here
envman add --key=START_TIME --value="$(TZ=UTC-9 date -r $BITRISE_BUILD_TRIGGER_TIMESTAMP +"%Y-%m-%d %H:%M:%S")"
envman add --key=END_TIME --value="$(TZ=UTC-9 date -r $UNIX_TIMESTAMP +"%Y-%m-%d %H:%M:%S")"
envman add --key=TOTAL --value="$(date -r $(($UNIX_TIMESTAMP - $BITRISE_BUILD_TRIGGER_TIMESTAMP)) +"%T")"
内容としては以下の通りです。
- 環境変数
$BITRISE_BUILD_TRIGGER_TIMESTAMP
(開始時刻)を日本時間に変換して環境変数$START_TIME
に代入 - 環境変数
$UNIX_TIMESTAMP
(完了時刻)を日本時間に変換して環境変数$END_TIME
に代入 -
$UNIX_TIMESTAMP
から$BITRISE_BUILD_TRIGGER_TIMESTAMP
のを引いた値(秒数)を00:00:00
の形式に変換して 環境変数$TOTAL
に代入
参考記事
3. Send a Slack message
Send a Slack message StepからSlackにWebhookで通知を送信します
A list of fields to be displayed in a table inside the attachment
の箇所に2のStepで作成した環境変数 START_TIME
END_TIME
TOTAL
を 追記します。
※最後にBitriseの環境変数 BITRISE_BUILD_NUMBER
も入れています
App|${BITRISE_APP_TITLE}
Branch|${BITRISE_GIT_BRANCH}
Workflow|${BITRISE_TRIGGERED_WORKFLOW_ID}
StartTime|${START_TIME} // 開始時間
EndTime|${END_TIME} // 終了時間
Total|${TOTAL} // ビルドにかかった時間
BuildNumber|${BITRISE_BUILD_NUMBER} // ビルド番号
4. Slack channelで表示を確認
無事表示が確認できました!🎊
実作業は調べながら1−2時間程度でしたが、記事を書くのにそれ以上に時間かかってしまいました😇
Finally
この記事であげているBitriseのCI/CDはFlutter大学というコミュニティ内のSlackで実際に運用されています。
アプリが気になった方は以下の記事をご覧ください。またダウンロードして使ってみてください!
Discussion