Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BitriseのCredits-Basedな 新プランの利用と改善

k-kohey
April 20, 2022

BitriseのCredits-Basedな 新プランの利用と改善

「【GMOペパボ x hey】iOS Meetup」にて使用した登壇資料です。
同僚が主にで進めてくれたプロジェクトを、ノウハウの共有やサポートを行う形で関わっていたk-koheyがまとめて発表しました。

k-kohey

April 20, 2022
Tweet

More Decks by k-kohey

Other Decks in Programming

Transcript

  1. Credit−BasedなTeamプラン |概要 • 特徴(*1) ◦ Gen2と呼ばれる高速なマシンを利用できる ◦ 最大10個のMacOSで同時にビルドできる ◦ ビルドのタイムアウト時間が大幅に向上

    ▪ 45(90)分から4時間に ◦ ビルドするためにはCreditの消費が必要 ▪ 標準的なスペックでは2credits/minを消費する ▪ さらに高いCreditsを消費することによってスペックの高いマシンを選択することも可能 • 2021/8からの新規ユーザはCredit-Basedなプランのみ選択できる状態(*2) (*1)https://blog.bitrise.io/post/faster-more-flexible-plans-on-bitrise-introducing-teams (*2)https://devcenter.bitrise.io/en/comparing-credit-based-and-concurrency-based-plans.html#:~:text=As%20of%20August%202021%2C%20you,depending%20on%20your%20subscription%20plan.
  2. 下準備②|bitrise.yml(*) の導入 • 概要 ◦ bitriseのワークフローやスタックの設定をyml形式にて記述したもの ◦ リポジトリにymlを配置すると設定が反映される • メリット

    ◦ bitriseに対して行った変更をGit管理に含めることができるため今後の変更に伴う事 故を防げる ◦ 各Branch毎に別の設定を適応できる (*)https://devcenter.bitrise.io/en/references/basics-of-bitrise-yml.html#basics-of-bitrise-yml
  3. Build Phaseのスクリプトを調整 • 背景 ◦ Build Phaseにて実行しているSwiftLintやSwiftFormatのスクリプトに 次のような問題があった ▪ 実行しなくていいタイミング(CI上)で実行されていた

    ▪ SwiftLintでは実行対象に含めなくていいソースファイル(差分が無いファイル) も対象となっていた • SwiftFormatは差分検知の仕組みがあり、この点は問題なかった
  4. Build Phaseのスクリプトを調整 • 方法 ◦ gitのdiffがあるときだけdiff のあるソースファイルに対し てコマンドを実行するように スクリプトを変更 •

    結果 ◦ CI上において毎ビルドそれぞ れ1~2分かかっていた処理が 0秒で終わるように改善 下記issue内にあるスクリプトに修正をくわえたもの コマンドの実行回数が最小になるように修正してある https://github.com/realm/SwiftLint/issues/413
  5. cacheの利用|RubyGemsのcache - 方法 - gemがインストールされるディレクトリのパス をcache push stepにて指定 - pushのトリガーを設定できるため、

    Gemfile.lockの変更をトリガーに指定 - cache pull stepを追加 - 結果 - RubyGemsの依存が少なかったこともあり cacheのpushおよびpullのオーバーヘッドの方 が大きくなり改善に繋がらなかった - 見積もりが甘く反省する結果となった (*)https://devcenter.bitrise.io/en/builds/caching/caching-ruby-gems.html 公式ドキュメント(*)にも方法が記載されている
  6. cacheの利用|Swift Pakcage Manager(SPM)のcache - 背景 - ProjectやCommand Line ToolにSPMを利用している -

    Project:FirebaseやOHHTTPStubなど - Command Line Tool:SwiftLintやSwiftFormatなど - Projectの依存関係とは分けて管理 - 仮説 - Swift Packageされているディレクトリをcacheするように設定すると Swift Packageのソースコードをcloneしてくる時間を省略できるはず
  7. cacheの利用|Swift Pakcage Manager(SPM)のcache - 方法 - Swift Packageのソースコードがcloneされる場所を確認 - Projectの依存の場合はDerivedDataに入る(*)

    - xcodebuildコマンドのcloned_source_packages_pathオプションで変更可能 - Package.swiftで解決する依存の場合はPackage.swiftと同じ ディレクトリに存在する.build/の中に入っている(自分調べ。例外あるかも。) - Ruby Gemsと同じ要領でPackage.resolveの変更をhookして ソースコードがcloneされるパスをcacheとしてpushする - 結果 - 期待通り1分と少しほどかかっていたソースコードのcloneを省略することができた - ビルド済みバイナリはcacheしてないのでさらなる改善にはCarthargeの導入が必要か? (*)https://asmz.hatenablog.jp/entry/cache-swift-package-manager-on-bitrise
  8. 結果 - 新しいプランを利用しさらに改善を加えることで 特定のワークフローのビルド時間を5割ほど削減できた - 今まで40~50分ほどかかっていたPull RequestのPushによってトリガー されるワークフローが20分前後に - Gen2が大きく削ってくれた

    - Pull Requestに紐づくビルドがすぐ終わるのは開発体験的な観点でもいい - ワークフローの実行頻度や実行の有無も調節したため、 特定のワークフローに限らず全体のビルド時間も軽減されている