🕐

[github actions] 秒で使えるCIパフォーマンスモニタリング用actionを作った

2022/12/07に公開

この記事はMakuake Advent Calendar 2022GitHub Actions Advent Calendar 2022の1日目の記事です。(遅刻)
CIにどれくらいの時間がかかるのかサクッと知りたいなと思い、サクッとactionを作ったので、サクッと紹介です。

3行まとめ

  • github actionsのパフォーマンス(実行時間)がどのくらいかわかるアクションを作った
  • いつも使っているgithubのworkflowに入れるだけ
  • 実行にかかった時間を成功/失敗のステータス x 中央値 平均値 最大値 最小値の計8パターンで取れる

👇コチラから使ってみてください!
https://github.com/marketplace/actions/workflow-time-predictor

もうちょっと具体的に

実行時間を計測したいワークフローの中でこのworkflow-time-predictorを使うと、これまでのワークフローの実行結果を元に、完了するのにかかる時間を教えてくれます。

概要

https://docs.github.com/en/rest/actions/workflow-runs#list-workflow-runs-for-a-workflow から得られるワークフローの実行結果を元にしています。

使い方

使い方としては下記のようにCIのいずれかのタイミング(実行開始時とかが良さそう)で使っていただくのが良いと思います

- name: Predict run time
        id: predict_run_time
        uses: jerome-1010/workflow-time-predictor@main
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          owner: ${{ github.repository_owner }}
          repository: ${{ github.repository }}
          workflow-file-name: "build.yml"

ワークフローの実行結果を取得するのにワークフローのファイル名が拡張子付きで必要なのがちょっと微妙だと思っていて、本当であればrun idから引っ張ってきたかったのですが走り終わっていないワークフローの情報は取れないようでこの形にしました。

また、デフォルトでは直近50回分の実行を元にして計算しています。

出力結果はactionのoutputに吐いているので、例えば${{steps.predict_run_time.outputs.succeed_median_time}}といったような形で取り出しSlackなどに流すことも可能です。

また、👇のような形で結果全体をログに吐くようにもしているため、ワークフローの実行結果画面で確認することも可能です。

---------- Result ----------
succeed_median_time: 0.23 min
succeed_average_time: 18.91 min
succeed_max_time: 461.60 min
succeed_min_time: 0.00 min
failure_median_time: 0.22 min
failure_average_time: 7.35 min
failure_max_time: 180.32 min
failure_min_time: 0.00 min
----------------------------

おわりに

今回参加したアドベントカレンダーですが、実は昨年も同じアドベントカレンダーに同時参加していました。二年連続で同時に参加できて嬉しいです(github actionsには記事を書かせる魔力がある)

昨年の記事はコチラ👇
https://zenn.dev/jerome/articles/cc07ad73e017ad

それはさておきまだまだアドベントカレンダーは続くので、引き続き他の記事も楽しみにしていただけると嬉しいです!
https://adventar.org/calendars/8496
https://qiita.com/advent-calendar/2022/github-actions

Discussion