概要
Travisを使うまでは今までJenkinsを使っていました。テストコードを充実させていくうちにGitHubのPull Requestごとにビルドさせたいという意識が高まり、GitHub pull request builder plugin といったJenkinsプラグインをインストールしようと試みました。
しかしあまりにも設定が面倒なので、Jenkins職人への道は諦めてTravisでCIを回すようにしました。
Travis CI: Building an Android Project (beta)
まだBetaの段階ですがJavaとして.travis.yml
に書かなくてもAndroidとして設定に書けるみたいで、見た感じすごい簡単そうなのでやってみることにしました。
なお、Robolectricの gradle-android-test-plugin
が入っていることが前提に進めていきます。
Robolectricでテストする
ドキュメントに書いてありますが、scriptを指定しない時のデフォルトは
gradle build connectedCheck
またはgradlew
がある場合
./gradlew build connectedCheck
が実行されるのでエミュレータが立ち上がってしまいます。エミュレータに関する記述が全くないとビルドに失敗するので、Robolectricでテストするために
script:
- ./gradlew build test
とするとエミュレータの存在確認が行われなくなり、Robolectricのテストが走るようになります。
.travis.yml
android:
components:
- build-tools-19.0.3
- android-19
- extra-android-m2repository
licenses:
- android-sdk-license-bcbbd656
env:
global:
- TERM=dumb
- secure: ......
- secure: ......
- secure: ......
- secure: ......
script:
- ./gradlew build test
componentsはビルドに必要なものを指定します。
licensesにはインストールされるコンポーネントの承諾するライセンスを指定します。これを書いておかないと自動的にライセンスを承諾できずビルドできません。
Travisでリリースビルドを作る
./gradlew build
はリリースビルドも作るため、keystoreやパスワードをTravisで入力されるようにする必要があります。
keystoreを含めたりするのはよくないので、そもそもTravisでリリースビルドを作らなければいいわけです。
script:
- ./gardlew assembleDebug test
とするとdebugのみビルドされます。これをやると下記の作業をやらなくていいことになります。
暗号化文字列の作成
travis encrypt
を使って暗号化された文字列を作成します。
travis
コマンドが入っていなければRubyGemsを使って gem install travis
でインストールできます。
% travis encrypt BUILD_RELEASE_STORE_FILE=foobar.keystore
Please add the following to your .travis.yml file:
secure: "......"
Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_STORE_PASSWORD=hatsukoi
Please add the following to your .travis.yml file:
secure: "......"
Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_KEY_ALIAS=foo
Please add the following to your .travis.yml file:
secure: "......"
Pro Tip: You can add it automatically by running with --add.
% travis encrypt BUILD_RELEASE_KEY_PASSWORD=anoko
Please add the following to your .travis.yml file:
secure: "......"
Pro Tip: You can add it automatically by running with --add.
--add
オプションで自動的に .travis.yml
に追加してくれるという機能があるのですが、YAMLが勝手にフォーマットされてインデントが崩れるのでおすすめしません。
.travis.yml
にはこんな感じに書きます。
before_script:
- echo "storeFile=${BUILD_RELEASE_STORE_FILE}" >> secure.properties
- echo "storePassword=${BUILD_RELEASE_STORE_PASSWORD}" >> secure.properties
- echo "keyAlias=${BUILD_RELEASE_KEY_ALIAS}" >> secure.properties
- echo "keyPassword=${BUILD_RELEASE_KEY_PASSWORD}" >> secure.properties
Gradleの設定
Gradleでビルドする際、secure.properties
を参照するようにします。
android {
signingConfigs {
release {
File securePropertiesFile = file('secure.properties')
Properties p = new Properties()
p.load(new FileInputStream(securePropertiesFile))
storeFile file(p.storeFile)
storePassword p.storePassword
keyAlias p.keyAlias
keyPassword p.keyPassword
}
}
}
これを書いてしまうとローカルで署名付きのAPKを作成するときにsecure.properties
が必要になってしまいます。前述のとおり ./gradlew assembleDebug
のみ実行して署名付きビルドをつくらなければこんなことしなくてもいいです。
エミュレータを使ったテスト
ちなみにエミュレータを使ったテストをやりたい場合、エミュレータを立ち上げて起動が終わるまで待機するところまで対応していないので.travis.yml
に自分で書く必要があります。
最後に
これでめでたくTravisでAndroidアプリがビルドできていることでしょう。いつでもTravisおじさんを眺めることができます。感動!!