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
完了時間として使いたいので Generate timestamps Step をworkflowの最後の方(Send a Slack message Stepより前)に追加して 環境変数 $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