AndroidのCIはDockerでビルドするのが楽

  • 125
    Like
  • 0
    Comment

追記: 実際に運用する際はライセンスにご注意ください: 公開用DockerイメージにAndroid SDKを含めるのはライセンス違反という話 - Islands in the byte stream

三行まとめ

  • 社内のJenkins環境 / Travis-CI / Circle-CI など、CIサービスごとにビルド設定を調べるのにうんざりしたのでDockerizeしてみた
  • 手元とCI環境がまったく同じになるので一度動くようになったら安定して動かせるはず
  • とりあえずCircle-CIで試して動いた

前提

OSXの場合、boot2dockerとdockerをhomebrewで入れましょう。boot2dockerはdockerを動かすためのVMとLinuxイメージを適当に整えてくれるやつです。

brew install Caskroom/cask/virtualbox # まだ入れてなければ
brew install boot2docker docker
boot2docker init
boot2docker shellinit >> ~/.zshrc # 適当
boot2docker start

Dockerfile

Dockerfile はこんな感じ。samtstern/android-sdk をベースにした gfx2015/android を使っていて、これはJDK8ベースなandroid project設定です。

アプリ固有の設定としては、projectをCOPYしてビルドするだけ。

これで手元でもCircle−CIでもビルドできて、実際のビルド結果の実例は以下のようになります。

ビルドとテストをしているだけで、成果物の取得はまだしていませんが、だいたいこんな感じでいけそうですね。

ハマりどころ

  • FROM samtstern/android-sdk にしたらJDK 7で、JDK 8に依存しているgradle pluginが動かなかったので利用できず
    • samtstern/android-sdk をベースにしたDockerfileを作ることにした
  • android-sdk-linux archiveの展開がそのままではうまくいかなかった
    • Circle-CIでだけ tar: android-sdk-linux: Cannot change ownership to uid 144773, gid 5000: Invalid argument というエラーが出る
    • tar --no-same-owner でとりあえず解決
  • WORKDIR /project しているにもかかわらず COPY . . がうまく動かず、/ にコピーされてしまった
    • COPY . /project にして解決