CI環境をいくつか比較してみようと思います。
主な対象はモバイルアプリのビルド環境なのですが、まずはTravis CIから。
対象はAndroidです。
記載内容は、基本的には公式ドキュメントを参考にしています。
ほぼ、Androidについてくるサンプルプロジェクトと同じようなレベルのものを使用しています。
.travis.yml
以下が、実際にプロジェクトをビルドした設定ファイルです。
branchによる、ビルド対象の指定、before_installなどを使い、特定のタイミングで、特定の環境を構築するなどが可能です。
language: android
android:
components:
- build-tools-19.1.0
- android-19
- sysimg-19
- extra-android-support
licenses:
- android-sdk-license-5be876d5 # new license!
- '.*intel.+'
branches:
only:
- master
before_install:
- android list sdk --no-ui --all --extended
script:
- ./gradlew assembleDebug
#after_success:
# - 成果物のapkを、特定のURLへアップロードする。
# => apkは、常に保存しておけるわけではない。特定の領域に保存する、という対応が必要。
また、設定でGitHubとの連携が可能なのですが、その場合、GitHubのHook & ServiceにTravis用のサービスが追加され、push/pull_requestのイベントに対して何らかの対応を実施することができるようになります。
つまづいた点
1つ、つまづいた点があります。少し前、Android SDKのlicensesが更新されたタイミングがあり、公式ドキュメントに記載されていた通りではライセンス情報が古くてビルドに失敗する、ということが確認されました。ここに記載しているライセンスなら、ブログ投稿時点なら大丈夫でした。
ビルド時に何らかのsecret keyを使いたい場合
要望として、secret keyをビルド時に使うこともあるかと思います。
その場合、こちらを参考にすると、travis.ymlの中で暗号化された形で同keyを指定、使用することができます。
詳細はURLを参照するとして、簡単な使い方は以下。
- Travisコマンドを使えるようにする
$ gem install travis
- 暗号化する
$ travis encrypt 'KEY=secure_key' Please add the following to your .travis.yml file: secure: "emcrypted key" Pro Tip: You can add it automatically by running with --add.
- 使用する
- 例えば、以下のように設定すると・・・
env:
global:
- secure: "emcrypted key"
以下のように暗号化した値を以下のように環境変数と同じ値として扱うことができるようになります。
secure_key = ENV['KEY']
感想
特定のライブラリや必要な環境をインストールできる所、それぞれの時点で必要なスクリプトなりを実施できるところはかなり使いやすい。プライベートリポジトリでも同様に使えるとして、例えばGitHub Enterpriseな環境でつなぎ合わせる方法をどうするのか、という所が気になる。
GitHub Enterpriseな環境ではつなぎ込む方法が無い、というのであれば、いろいろ考えないといけないかもれいない・・・例えば、社内ライブラリをinstallの段階でsubmoduleとして取得するときなんか、外部からたどることができる処理を入れる必要がでてくると、それはいろいろ手間になりそう・・・
記事準備してたのに先を越されてしまったw
apkの保存はafter_successよりdeployで書くほうがいいですね
see: http://docs.travis-ci.com/user/deployment/
あとlicensesは正規表現でも書けます
see: https://github.com/nowsprinting/AndroidAppsTestAutomationSamples/blob/master/.travis.yml