Jenkins 2.0+DockerをMacに入れてAndroid Buildに使う
目的
- JenkinsでAndroid開発の継続的デリバリーを実現したい
- Jenkinsの環境が膨れ上がるのを防ぐためDockerでジョブ毎に環境を構築したい
- 今後iOSのビルドにも使えるようにMac上で環境を作りたい
やること
- Jenkins2.0入れる
- Docker Toolbox入れる
- Dockerfileで以下の環境を作る
- Android Projectをcloneする
- Dockerコンテナ上にcloneしたプロジェクトをマウントしビルドを実行する
Jenkins2.0入れる
Docker Toolbox入れる
どちらもインストーラ落としてきてインストールした。
JenkinsはHomebrewで入れようとしてもまだ1.x系らしい。tapするとか別のやり方するとイケるかもしれない。
Docker Toolboxはdocker run通らなくてCannot connect to the Docker daemon.言われたけどeval忘れてただけだった。
Cannot connect to the Docker daemon. Is 'docker -d' running on this host? · Issue #1010 · docker/kitematic · GitHub
Dockerfileつくる
良さ気な設定があるので、これをベースにする。JDK 1.8まで視野に入れた設定になっている。
https://hub.docker.com/r/gfx2015/android/
こうなる
AndroidTodo/Dockerfile at master · MKomiya/AndroidTodo · GitHub
Android Projectをcloneする
Dockerコンテナ上にプロジェクトをマウントしビルドを実行する
jenkins jobで「ソースコード管理」>「Git」からRepositoryとか諸々設定する。
その後「シェルの実行」で「シェルスクリプト」に以下を設定
docker-machine ls docker-machine rm -f dev docker-machine create -d virtualbox dev eval "$(docker-machine env dev)" docker build -t android-todo . docker run -i android-todo ./gradlew --stacktrace test build docker-machine stop dev docker-machine rm -f dev
ホントはbuild.shファイルとかにしておくべきだと思う。
これでビルドまでは問題なく通る。
ヤッターデキタヨー(^o^) pic.twitter.com/NmNpULoJwF
— kamakama (@kama2vern) 2016年5月2日
この後は適宜apkを保存するなりHockeyAppやDeployGateへアップロードすれば良いと思う。
ファイルは/project/path/to/build/outputs/apk/以下とかに入ってるはず。
ハマったところ
docker: command not found
JenkinsのPATHに/usr/local/binを通す。
「Jenkinsの管理」>「システムの設定」
Host does not exist: "default"
デフォルトではdocker-machineが立ち上がってないのでcreateする必要がある。
cannot enable tty mode on non tty input
最初はdocker run -it ってやってたけどttyオプションは不要だった。