この記事は RubyMotion Advent Calendar 2012 の 7 日目の記事です。
最近になってようやく Jenkins を使い始めてみたので、RubyMotion アプリを Jenkins でテスト実行する方法について調べてみました。
Jenkins をインストール
Homebrew を利用してインストールしました。
1
|
|
以下のコマンドを実行すると Jenkins が起動します。
1
|
|
ログインしたときに自動的に Jenkins を起動したい場合には以下のコマンドを実行すると良いようです。
1 2 |
|
Jenkins をインストールしたマシンからのみアクセスする場合には問題がないのですが、別のマシンからもアクセスしたい場合には homebrew.mxcl.jenkins.plist を修正する必要があるようです。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
--httpListenAddress
の行をざっくりと削除しましょう。
http://localhost:8080/ にアクセスすると、Jenkins で作業をおこなうことができます。
ジョブを作成
試しに https://github.com/HipByte/RubyMotionSamples の Timer アプリをテストするジョブを作ってみたいと思います。
とりあえず、サンプルを clone しておきます。
1 2 |
|
次に Jenkins でジョブを設定してきます。
メニューの「新規ジョブ作成」を選択します。ここではジョブ名に「Timer」とし、「フリースタイル・プロジェクトのビルド」をチェックします。
「プロジェクトの高度なオプション」でカスタムワークスペースを設定します。先ほど
git clone
したプロジェクトのパスを設定します。私の環境では/Users/watson/work/RubyMotionSamples/Timer
というパスになります。
「ビルド」で「シェルの実行」を選択し、
rake spec
を実行します。
ビルド実行
先ほど作成したジョブを実行してみます。メニューから「ビルド実行」を選択します。 ビルドした結果のコンソール出力を見てみましょう。
1 2 3 4 5 6 |
|
SUCCESS
で終了しているのに、*** stdout unavailable, output disabled
と結果が出力されません。
実行するスクリプトの修正
RubyMotion 1.28 で環境変数 SIM_STDOUT_PATH
、SIM_STDERR_PATH
を設定すると標準出力と標準エラーの結果を指定したパスに保存されるようになったので、これを使ってみます。
ジョブに設定したシェルスクリプトを以下のように変更します。
1 2 |
|
ジョブを実行すると、コンソール出力が次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
ずいぶん良くなりました。
Jenkins はスクリプトの終了コードを見て、成功なのか失敗なのかを判断しているようです。テストがすべて成功したときだけ SUCCESS としてほしいところです。そこで次の run_spec
というファイルを作成してパスが通っているところに配置し、Jenkins で実行するようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
Jenkins の「シェルの実行」には run_spec
とだけ記述すれば OK です。これでテストに失敗したときには Jenkins のステータスが赤く表示されるので分かりやすくなりました。
記事を書くまでに設定したのはここまでです。あとは定期的にテストを実行したり、テスト結果をメールで送信したりなどするとより良くなるのではないでしょうか。
Jenkins を使い始めたばかりでわからないことばかりなので、便利な使い方などありましたらお知らせください〜。
まとめ
Jenkins で RubyMotion アプリを実行するときには、環境変数 SIM_STDOUT_PATH
と SIM_STDERR_PATH
を使いましょう。