GitLab CIでXcodeのユニットテストを自動実行した際の手順です。
Xcodeプロジェクトの設定 以外はiOSに依存しない内容です。
バージョン
ツールおよび OS は以下のバージョンを使用しました。
GitLab 8.5
Xcode 7.2.1
OS X 10.11.2(ビルドマシン)
GitLabでCIを有効化
自動ビルドの設定
- project を選択 -> 左ペイン左下の Settings から CI/CD Pipelines 画面に移動。
- 下記 ランナーの設定 手順を行い、ブラウザをリロードすると、設定したランナーが表示されるので
Enable for this project
ボタンを選択し、ランナーを有効にします。
ランナーの設定
1. ビルドマシンに GitLab CI Multi-Runner をインストール
$ sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
2. 実行権限の付与
$ sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
3. ランナーの設定
$ gitlab-ci-multi-runner register
- URL, トークンの入力を求められますが、GitLabの以下に表示される値を使用します。
- GitLab -> 任意nprojectを選択 -> Settings(歯車のマーク) -> Runners
- executor としては今回
shell
を選択しておきます。
4. ランナーのインストール、起動
$ cd ~
$ gitlab-ci-multi-runner install
$ gitlab-ci-multi-runner start
- この時、
register
,install
,start
を同じユーザで実行しないとランナーが正しく起動しないので注意します。
5. 確認
正しく設定ができていれば、GitLab上でランナーのステータスがグリーンになります。
Xcodeプロジェクトの設定
スキームの作成
- プロジェクトの Manage Schemes メニューを選択し、CI でビルドしたいプロジェクトの shared にチェックをしておきます。
- プロジェクトファイルの直下に
{project_name}.xcodeproj/xcshareddata
というディレクトリができるので、忘れずにgit commit
します。
以下のコマンドで scheme が登録されていることを確認できます。
# ワークスペースの場合
$ xcodebuild -workspace <ワークスペース名>.xcworkspace -list
# プロジェクトの場合
$ xcodebuild -project <プロジェクト名>.xcodeproj -list
.gitlab-ci.yml
-
.gitlab-ci.yml
をリポジトリのルートに追加。 - リポジトリにファイルがプッシュされたタイミングで実施したいコマンドを yaml に記載します。
今回は、リポジトリからプロジェクトをクローンし、ユニットテストを実行するだけです。
test:
script:
- export LANG=en_US.UTF-8
- xcodebuild test -workspace <workspace-name>.xcworkspace -scheme <scheme-name> -destination 'platform=iOS Simulator,OS=9.2,name=iPhone 6s'
ビルド
以上で一通りの手順が完了しました。リポジトリにコミットがプッシュされる度に、上記の yaml に記載したコマンドが実行されます。
参考URL
GitLab CI Quick Start
http://doc.gitlab.com/ce/ci/quick_start/README.html
GitLab CI Multi Runnerのインストール
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/osx.md
Automating the Test Process
https://developer.apple.com/library/tvos/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/08-automation.html