circleCI で Android アプリのテストをする (travis から移行)
前回の記事です。
circleCI に移行する
前回の記事でまあうまく行ったのですが結構な確率で落ちる。masterが進んでるわけではないのに pr と pull で違う結果になったり、 merge すると落ちたりしていました。
いろいろやってみたのですが結局不安定なまま変わらなかったし、travis が firefox で見るとめちゃくちゃ重い*1といった理由で travis で消耗するのをやめようということになりました。
そして CircleCI を使ってみました!
CircleCI は travis CI と同じように CI サービスの一種です。travis は open source では無制限ですが、 CircleCI では4コンテナに制限されるみたいです。*2
まあ4コンテナもあれば十分でしょう。
build.gradle
とかは前回の記事を参考にしてください。
.travis.tml から circle.yml へ
circleCI も travis と同じように GitHub にシュッと連携できます。
また、CircleCI も Android のビルドはサポートされています。 travis では beta のようですが CircleCI では正式にサポートされていそう。ドキュメントも最新の Android SDK が書いてあってよさ気です。
そして書いた circle.yml
はこちら。
machine: java: version: openjdk7 environment: ANDROID_HOME: /usr/local/android-sdk-linux GRADLE_OPTS: -Xmx512m dependencies: pre: - echo y | android update sdk --no-ui --all --filter "platform-tools,build-tools-23.0.1,build-tools-22.0.1,android-23,android-22,sys-img-armeabi-v7a-android-22,android-19,sys-img-armeabi-v7a-android-19,android-17,sys-img-armeabi-v7a-android-17,android-15,sys-img-armeabi-v7a-android-15,extra-android-support,extra-google-m2repository,extra-android-m2repository" post: # remove cache - rm -r ~/.gradle - echo n | android create avd -n test22 -f -t android-22 - echo n | android create avd -n test19 -f -t android-19 - echo n | android create avd -n test17 -f -t android-17 - echo n | android create avd -n test15 -f -t android-15 checkout: post: - git submodule sync - git submodule update --init test: override: - case $CIRCLE_NODE_INDEX in 0) $ANDROID_HOME/tools/emulator -avd test22 -no-window -no-boot-anim -no-audio ;; 1) $ANDROID_HOME/tools/emulator -avd test19 -no-window -no-boot-anim -no-audio ;; 2) $ANDROID_HOME/tools/emulator -avd test17 -no-window -no-boot-anim -no-audio ;; 3) $ANDROID_HOME/tools/emulator -avd test15 -no-window -no-boot-anim -no-audio ;; esac: background: true parallel: true - circle-android wait-for-boot: parallel: true - ./gradlew --info clean :app:connectedAndroidTest: parallel: true
やってることは travis とそう変わらないです。
ポイント
secret key について
どうやら travis でも circleCI でも secret key はわざわざ yml に埋め込まなくても web の UI から直接環境変数をプライベートで指定できるみたいでした。
checkout
行circleCI は空気を読んで
submodule init
してくれないので書きます。rm -r ~/.gradle/
circleCI は勝手にキャッシュしてくれるのですが、キャッシュONにすると fail のあと直しても fail したりするのでやめました*3。
$CIRCLE_NODE_INDEX
,parallel: true
circleCI で複数コンテナで走らせる時のオプションで、
CIRCLE_NODE_INDEX
の環境変数にインデックスが入るので各々やりたいコマンドを書きます。*4 そして、複数で走らせたいときはparallel
をつけると走ってくれます。circle-android wait-for-boot
travis における
android-wait-for-emulator
です。
やってみたところ travis よりも早い!!かと思ったけどそんなに変わらない。ただ UI が firefox でも固まらない(大切)から良い。
テスト結果
確率的に落ちる
結局 CircleCI でも変わらず時々落ちちゃいました...
続きは次の記事↓で。