私は個人プロジェクトでもそれなりの規模になるときは、プルリクエストベースで機能開発してCIが通ってからマージするというスタイルをとる事が多いです。
そこでCIサービスの完了時間を短くしたいのですが、Androidプロジェクトの場合ふつうにDockerによる実行だおと7~10分くらい掛かってしまい、気持よく開発できません。そこでちょっとチューニングしてみました。といっても先人がいるのでほぼそれをなぞっただけです。
細かすぎて伝わらないかもしれない、CircleCIでDockerをごにょごにょするときのスピードアップテク - パラボラアンテナと星の日記
このエントリのうち、Androidプロジェクトでも効果がありそうなDockerイメージのキャッシュを行ってみた結果、2分ほど短縮できました。以下の右側の3つのビルドがそうで、明らかに時間が短縮されているのが見て取れます。
以下、Dockerイメージをキャッシュする設定です。
machine: services: - docker dependencies: cache_directories: - "~/cache" override: - docker --version - docker info - | set -xe if [ -e ~/cache/docker-image.tar ] && [ $(md5sum Dockerfile | cut -d' ' -f1) = $(cat ~/cache/dockerfile.digest) ] then docker load < ~/cache/docker-image.tar else mkdir -p ~/cache docker build -t test . md5sum Dockerfile | cut -d' ' -f1 > ~/cache/dockerfile.digest docker save test > ~/cache/docker-image.tar fi test: override: - docker run --name runner test
Android-Orma/circle.yml at v0.15.0 · gfx/Android-Orma · GitHub
しかし…本来AndroidのCIをdockerで走らせるのは、CIサービスへの依存をなくすためでした。こんなふうに circle.yml
を育て始めるのであれば、dockerは使わなくてもいいかもしれないですね。dockerゆえのハマりどころもありますし、Android SDKのコンポーネントのうち何を含めるかという判断も難しいです。
そんなわけでAndroid CIをdockerで走らせるのを幾つかのプロジェクトでやってみた結果、そこまで便利ではないなという印象です。実案件ではおそらくやる意味はそれほどないでしょう。