iOS開発のCI環境を提供するサービスには以下の2つがあります。

  • Travis CI
  • Greenhouse CI

また、自分でCIサーバーを立てる場合には以下の2つの選択肢があります。

  • Xcode Bots
  • Jenkins

自分はお金を掛けずになんでも自動化できるJenkinsを選ぶことにしました。 Jenkinsにアクセスするために自宅のMacに繋ぎに行くのは嫌だったので、VPSでJenkinsを動かし、Macをそのスレーブにすることにしました。 Macで動くスレーブエージェントは自分からマスターに繋ぎに行ってくれるので、ユーザーとしてはVPSに繋げれば十分ということになります。

ノードの登録

  1. “Jenkinsの管理” > “ノードの管理” > “新規ノード作成”からノードの作成を選択します。
  2. リモートFSルートを設定し、起動方法を”JNLP経由でスレーブを起動”とします。
  3. “JNLP経由でスレーブを起動”としたときに表示されるslave.jarをMacに保存します。
  4. Macでslave.jarを実行し、Jenkinsにスレーブが認識されることを確認します。

launchctlへの登録

Macの起動時に自動的にslave.jarを実行したいので、slave.jarをlaunchctlに登録します。 ~/Library/LaunchAgents/com.example.ci.plistに以下のような内容のplistを配置し、Macの再起動後にslave.jarが走っているか確認します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>UserName</key>
    <string>yourname</string>
    <key>Label</key>
    <string>com.example.ci</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/java</string>
        <string>-jar</string>
        <string>/path/to/slave.jar</string>
        <string>-jnlpUrl</string>
        <string>http://ci.example.com/computer/mini/slave-agent.jnlp</string>
        <string>-secret</string>
        <string>abcabcabcabcabcabcabcabcabcabcabcabcabc</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/path/to/stdout.log</string>
    <key>StandardErrorPath</key>
    <string>/path/to/error.log</string>
</dict>
</plist>

以上でスレーブの設定は完了です。

ビルドタスク

Rakefileにまとめていて、CIというタスクを実行しています。