Cronでビルド用のスクリプトを定期的に実行するだけでも、完全自動のCIを実現できますが、CIツールを使うとより簡単に実現できます。今回はiOSアプリ開発(とくにUnityを使ったゲーム開発)で最近よく使われているJenkinsというCIツールを試してみます。まずはインストール。
Jenkinsを使うとなにがよいのか
「レポジトリから最新のソースコードを一式取得してきて、テストする。また、ビルドしてTestFlightにアップロードする」一連の流れをゼロからスクリプトで記述するのはかなり面倒です。エラーハンドリングを含めると、コードはどんどん長くなり導入コストが大きくなってしまいます。
JenkinsをはじめとするCIツールでは、これらの各処理をパラメータを指定するだけで実行できるようになっており、自動ビルドの導入コストが大幅に圧縮されます。また、スクリプトだけでは実現が難しい過去の履歴の管理はgitのhookとの連携など、様々な便利な機能があります。CIツールを使わない理由はとくにないでしょう。
Jenkins以外にもCIツールは存在しますが、最近周りで評判がよく、オープンソースで無料で使えるので、今回はJenkinsを試します。
JenkinsでiOSアプリビルドを自動化する上での注意点
Jenkinsの設定を始める前に、Jenkinsを使ってiOSアプリのビルドを自動化する上での注意点を頭に入れておきましょう。
iOSアプリにはCode signingの仕組みがあります。開発中のアプリを実機で動作させるためには、ビルド時にオプションで適切なProvisioningを指定する必要があり、Provisioningを使用するには適切な鍵/証明書がキーチェーンに登録されている必要があります。これはJenkinsを使ってビルドする場合でも同じで、Provisioningファイルや鍵/証明書はJenkinsがアクセスできる正しい場所になければいけません。
継続的に自動的にビルド/テストを行うことを考えると、Jenkinsは本来デーモンで動かしておいた方がよいのですが、デーモンで動かすとアクセス権などの関係でCode signing周りの設定が複雑になってしまいます。なので、最初にJenkinsを使った自動ビルドの流れを把握する段階では、デーモンとしてではなくログインユーザでコマンド上からJenkinsを走らせて色々試していきましょう。
Jenkinsのインストール
Jenkinsはjenkins-ci.orgにて配布されています。Mac OS X用のネイティブパッケージも用意されているので、これをダウンロードしましょう。
ネイティブパッケージのインストーラを起動します。途中でインストール内容の「カスタマイズ」を選択します。
今回はわかりやすさ重視でデーモンとしては動かさないので、Start at boot as…の2項目のチェックを外します。
インストールが完了したらターミナルから手動でJenkinsを起動します。
java -jar /Applications/Jenkins/jenkins.war
Jenkinsは標準では8080番ポートで起動します。起動が完了したらブラウザからlocalhostの8080番ポートにアクセスしてみましょう。
今後基本的な操作はすべてこのWeb UI上から行えます。IPアドレスを記録しておけば、ほかのマシンからも操作できるのでとても便利です。
さて、これからいよいよプロジェクトの自動ビルドを試していく訳ですが、JenkinsはそのままではGitに対応していません。そこで、最初にGitが使えるようにプラグインをインストールします。
「Jenkinsを使ったiOSアプリビルド自動化2」への1件のフィードバック