追記: 実際に運用する際はライセンスにご注意ください: 公開用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
でとりあえず解決
- Circle-CIでだけ
-
WORKDIR /project
しているにもかかわらずCOPY . .
がうまく動かず、/
にコピーされてしまった-
COPY . /project
にして解決
-