為さねば成らぬ

retia.verno@gmail.com

PRに対してCache保存を有効にする

背景

AndroidアプリのビルドにBitriseを用いている。 Bitriseはビルドの一連の流れをWorkflowと呼び、それを構成するのがStepである。 このStepのうちCache Pushというものがあり、これは生成したファイルをBitriseのCacheに置くものである。 通常はステップの最初に対するCach Pullを実行してファイルを取得しビルドを行い、その結果の生成物に対してステップの最後でCach Pushを実行する。 Pushするキャッシュについてはファイルを指定することも出来るが、用意されているビルドは自動的にその指定を行ってくれる。 例えばAndroid Buildはapkを生成するが、そのapkのパスををキャッシュに置くリストに自動で設定してくれる。

課題

Cache Pullに対してはPull Requestをトリガーとしてビルドされるときskipされてしまう

調査

discuss.bitrise.io

Workflow Editor (UI上でグラフィカルにworkflowを編集できる) では利用できないが、bitrise.yml (Workflow Editorで作ったかどうかに関わらず、存在するWorkflowをyml形式でweb上で編集できる) にて設定が可能。

    - cache-push:
        run_if: ".IsCI"

ほぼすべてのステップで run_if が使える。これは名前の通り特定の条件下でのみそのステップを走らせるもので、Workflow Editorの設定では前のステップでビルドがこけたら実行しない、ということが設定できる。 デフォルトでは run_if: ".IsCI | and (not .IsPR)" つまりPullRequestでは走らないようになっているのでそれを削除することで走らせることが出来る。

雑感

そもそもやりたいこととして、並列ビルドによるビルド高速化だった。 ただAndroidのビルドだとgradleはキャッシュを有効に活用することで高速化を行っており、並列ビルドをするとこのキャッシュの恩恵が得づらい状態になってしまう。 予めある程度ビルドをしておき、そのキャッシュを使って並列ビルドを実行することを考えていた。 まだうまくいってない・・・