こんにちは。クルーズ株式会社CTOの鈴木です
今回はJenkins pipelineでFlutterのビルド時間を短縮化した件についての事例紹介です
ビルド遅い問題をどうにかしたい
アプリのビルドが遅い。
まあ遅いといっても約40分。通常時であればその間に別の仕事をしたり昼休憩をとったり時間をうまくやりくりしているので業務上そこまで問題があるわけではないのですが、緊急の不具合修正ですぐビルドしてデバッグ&申請しなきゃ!みたいなときにこの40分という時間はとにかく耐え難く発狂しそうになります。
発狂しても何も変わらないことがわかっていても発狂しそうになります。
なのでこのビルド時間というのは1分1秒でも早くするのに何をしたらいいんだろうというのが今回のテーマです
当時はビルドマシンはMac Studioの予定だった
このビルド時間の問題が顕著になったタイミングはFlutterリリースを控えデバッグを頻繁に実施していた2022年2月ごろです
以下の記事にもあるようにM1チップがビルドを圧倒的に早くできるという情報もあったことから、M1チップ搭載のMacStudioにビルドで困らないだけのRAMを積みマシンパワーでビルド時間を短縮させようと当時は考えており、M1 Ultra Chip(20 Core)搭載のMac Studioを予約し、その上に一式環境構築してJenkinsのSlave Nodeとして追加して運用することでビルド所要時間を短縮化する計画を立てていました。
Mac Studioがいつまでたっても入荷せず…
発注を行ったのが2022年3月初旬だったのですが、当初から供給が追い付いていなかったのと中国ロックダウンの影響、ビルドでの用途のためカスタマイズモデルとして発注してしまったことなど様々な要因で一向に入荷せず、7月末時点でも入荷の目途が立たなかったことで、この問題が5か月間解決せず我慢の限界だったため、現時点で現実的に入手可能なMac の最上位機種であるMac Pro (8 Core/ 16スレッド)のマシンと運用上の工夫によってまずはできる限り短縮化しようということでJenkinsの並列ビルドにてビルド処理の高速化を行いました
Jenkins Pipelineを使って各production とOSごとにビルドを並列化する
Jenkinsにはバージョン2.0以降GitLabなどと同様にビルドパイプラインを実現できるPipeline Pluginがあり今回はこの機能によってビルドの並列化を実現しました。
現状ビルドに利用可能なMac Proは1台なので、今回はこの1台に各production(開発/RC/本番)×OS(iOS/Android)の計6つのビルドを並列化して処理するパイプラインとして構成しています。
ビルド時間はどのくらい短縮した?
ざっくりですが約40分⇒13分まで短縮ができました。
現時点でビルド中にCPUが100%に貼りついているので、ビルドマシンを分散すればさらなる短縮が目指せそうです。
iOSとAndroidではiOSのほうがビルドに所要時間がかかるので、MacStudio が納品されたら、iOSのビルドをMac Studio のノードで実行させることでさらなる短縮が目指せるのではないかなと期待しています。