「Engineer LT#1 Android|Organized by U-NEXT」(2022年7月14日)での発表資料です。
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
View Slide
自己紹介okuzawatsフラー株式会社ソフトウェアエンジニア(Android)
今日話すことの要約GitHub Actions上で無計画にテストを回しまくってたら会社のGitHubが完全停止する寸前でしたそんなことにならないよう、計画的にGitHub Actionsを回しましょう
前提知識会社で契約しているGitHub Enterpriseは、月あたり使える時間の上限(単位:分/月)が決まっている。上限を超えるとGitHub Actionsが完全に止まってしまう(らしい)。※ プランによるのかもしれない
事件の数日前
暫定対策macOS上で動いているGitHub Actionsのトリガーが走る頻度を落とす。macOS上で動いているGitHub Actionsを完全停止させるわけにはいかないので、頻度を落として様子を見よう、という判断。
事件当日
ダメでした頻度は少なくなってもmacOS上で動いている子と、それ以外のOS上でも動いている子たちがモリモリとGitHub Actionsの残りを食べ尽くしました。
Your enterprice has used 100% of included services forGitHub Actions.
100%中の100%!!!偉い人が追加でGitHubに課金してくれて、GitHub Actionsの枠を一時的に増強会社のCI/CDが完全停止する事態を回避
やっぱりダメでした
なんやかんやあってGitHub Actionsの完全停止は回避しました。
何が起こったのか
エミュレータテスト on GitHub Actions昨年秋から、担当しているAndroidアプリにおいて、GitHub Actions上でエミュレータを用いた自動テストを回し始めた。
実行頻度Pull Request作成時やdevelopブランチへのpush時などにテストを実行していた。普段は大きな開発がないプロジェクトなので、月あたりのエミュレータテストの実行回数はさほど多くなかった。
macOSインスタンスGitHub Actions上でAndroidのエミュレータを実行する場合、macOSインスタンスの使用が推奨されている。GitHub Actions上でmacOSを動かすと、Ubuntuの場合の10倍の速さでGitHub Actionsの使用枠を消費する。
普段は問題なかった普段は大きな開発がないため、月あたりのエミュレータテストの実行回数はさほど多くなかった。定期的にGitHubの管理者に確認して、上限まで余裕があることを確認していた
問題がある時もあったある機能を開発する時、エミュレータテストの実行回数が普段よりも大幅に増えた。そのためGitHub Actionsの使用量が増加し、簡単に上限に達した。
原因①macOS上で動くGitHub Actionsがトリガーされる頻度が一時的に高くなることで問題が発生する可能性を考慮せず、普段よりも大きな規模の開発に入ってしまった。
原因②普段からGitHub Actionsの使用量をモニタリングする習慣がなかった。
原因③GitHub Actionsの消費量はリアルタイムにモニタリングできないので、様子を見ている間に対応が後手に回ってしまった。
対策① 1日1回の定時実行に変更コストの高いmacOS上での実行頻度を見直しました。こういうやつです(※実際の設定とは異なります)
対策② 定期的なモニタリング定期的に実施されるMTG上で、GitHub Actionsの消費量を確認するようにしました。
まとめGitHub Actions上でAndroidのInstrumented Testを、macOS上で無計画に動かしてしまった。macOS上でGitHub Actionsを動かすのは高コストなので、無計画に回すとGitHub Actionsの枠を簡単に喰い潰す。ご利用は計画的に