[iOS 8/Xcode 6] BotsでCIしよう(1) – ServerとXcodeでの環境設定
はじめに
Xcode 5からBotsという名前でCI (Continuous Integration) 機能が追加されました。これによって比較的簡単な設定で継続的にビルドやテストを実行し、定期的に品質を計測できる環境が構築できました。Xcode 6でも引き続きBotsの機能がアナウンスされています。そこで以前のXcode 5版の導入編をUpdateしてXcode 6 & Yosemite対応版として記事にします。
ますはセットアップをしてみます。
必要なもの
- Mac OS X Yosemite
- Mac OS X Server 4
- Xcode 6
Mac OS XサーバーはアプリケーションですのでMac App Storeからイントール可能です。ただし、2,000円という微妙な価格設定になっています。
サーバーアプリをつかった方は少数派だと思われますが、WikiやWeb Server、ファイル共有などオンプレ環境(Macのクラウドは少ない&高いので)でMacで固めてるなら結構便利そうな機能が揃ってます。
OS X Serverアプリ での Xcode サービス の設定
まず開発マシンではなく、OS X ServerにもXcodeがインストールされている必要があります。
- ビルドに使用するXcodeの場所を設定します。
Xcodeを選択すると下の画面になります。 - アクセス > アクセス権
権限の設定をクリックします。ここではBotの作成と閲覧権限を設定します。
作成と閲覧で別のロールにしたい場合は下のチェックボックスを入れて、閲覧権限を設定します。 - ビルド > ビルド実行
ビルドで使用するXcodeを設定します。 - ビルド > 開発チーム
チームの設定をクリックします。+ ボタンで使用しているDeveloper Programで使用しているAppleアカウントを登録します。 - デバイス
Unit Testで使用するデバイスを登録します。ServerマシンにiOSデバイスが接続していると以下のように認識されます。これはチームの開発用端末としてAppleに登録されている必要があります。Add to Team ボタンをクリックし登録完了です。
開発用Mac / サーバーを設定
- Xcode > Preference > Accounts から + ボタンをクリックして Add Server... を選択します。Xcodeサービスが設定されたサーバーを選択し、そのサーバーへのログイン情報を設定します。後にBot作成時に選択項目になります。
開発用Mac / プロジェクトの設定
Manage Schemes からCI対象のスキームの Shared チェックを入れます。
- Manage Schemes を選択。
- CI対象のScheme...のShared チェックをONにします。
- 設定したらCIサーバーから取得した時に設定が反映されるように Push します。(Gitの場合)
開発用Mac / Bot の作成
Analyze、Test、Archive の動作を定義した Bot を作成します。
- メニュー Product > Create Bot... からBotの新規作成をします。
- 対象のスキーム、Botの名前(登録しなければ自動設定される)、どのサーバーで動作させるかを設定します。Commit and Integrate immediatelyは設定後直ぐにCommit又はPushして1回すぐにBotsを走らせるかを設定します。
- リモートリポジトリのログイン情報を設定します。この設定方法はXcode 5から変更されていますが、設定される本質的な内容自体に変更はありません。
Changeを選択でリポジトリの情報を変更できます。
今回のリポジトリには既存のSSH Keyを使用するのでExisting SSH Keysを選択します。
SSH Keyを設定します。
- Schedule and IntegrateはどのタイミングでBotを実行させるかを設定します。今回はコミット時(Push時)に設定しました。ただし、リアルタイムではなく5分おきにポーリングして変更があればBotsを実行するようです。Actions はBotsに何をさせるかを設定します。Cleaningはまっさらな状態からCloneするかどうかの設定ですが、時間がかかりそうなので何か問題が出てきたらNever以外に感じで良いと思います。
- テスト対象のデバイスを設定します。サーバーにデバイスが物理的に繋がっていればそれが使えます。もちろんシミュレータも使えます。
- Configure bot triggers
Xcode 5から一番変更された部分です。Before IntegrationとAfter Integrationのタイミングでメールや通知が設定できます。 Shellスクリプトが書けるので、例えばSlackやChatWorkなどのチャットツールに通知するスクリプトが置けそうです。
Notify Committers on Failure で失敗時の通知を設定します。
Send Email はどのタイミングでEmailを送信するかを設定します。 - 設定は以上になり、Commit and Integrate immediatelyが有効になっていれば初回のIntegrationが始まります。
まとめ
環境構築自体は以前とあまり変更はありませんでした。その中の変更点ではIntegrationの前後にScriptを流せるようになったことで通知系に便利な仕組みが追加されました。