web-dev-qa-db-ja.com

iPhoneアプリの自動ビルドサーバーを設定するためのベストプラクティスは?

私は、iphoneアプリ用に自動化されたナイトリービルドサーバーをセットアップし、何が機能し、何が機能しないかについてのアドバイスを探しています。

基本的に、少なくとも毎晩すべての単体テストを実行し、新しいアドホックビルドを社内Webサイトに公開するものです。

すべての開発者はラップトップを使用しているので(一晩でオフになります)、これを行うために専用のMacMiniを入手することを検討しています。

標準のMacOSXとサーバーエディションのどちらを入手すべきかわかりません。

少なくとも最初の試みでは、実際の作業を行うためにcrontabから実行される単純なシェルスクリプトを使用することを検討しています。将来的には、完全継続的インテグレーションサーバー(ハドソンなど)が適しています。

非常に簡単ですが、検索ですでにいくつかの記事を見つけました。

http://nachbaur.com/blog/how-to-automate-your-iphone-app-builds-with-hudson

http://blog.jeffreyfredrick.com/2008/11/27/continuous-integration-for-iphonexcode-projects/

また、このstackoverflowの質問には、いくつかの有用なソフトウェア情報があります(2年前ですが)。

Xcodeプロジェクトの継続的インテグレーション?

ビルドサーバーのセットアップ方法について人々が提供できるガイダンスや、潜在的な問題があれば大歓迎です。

ありがとう!

ジョセフ

43
JosephH

ハドソン(またはそのフォーク Jenkins )をセットアップするのは本当に難しいことではありません。それは私たちが内部で使用するものです。それからiphoneビルドを実行するだけではありません。実際、iphoneビルド用にセットアップされたMac miniは1つだけであり、比較的最近追加されたものです。しばらくの間、他のさまざまなプラットフォーム用に6つ以上のスレーブがありました。

Meet Hudson ページの「TestDrive」リンクから試してみて、セットアップがいかに簡単かを実感してください。 (これは私を売り込んだものの1つです。始めるのは本当に簡単でしたが、それでも構成可能で、拡張可能で、過去数年にわたって私たちを拡大し続けるのに十分強力です。それは本当に厄介な手の山に取って代わりました-作者であるにもかかわらず、私は休息するのを見てとてもうれしかったロールスクリプトとプログラム。)

ハドソンバックエンドは強力なMacOSXサーバーで実行されていますが、どこでも(Linux、Windows、Mac)実行できなかった理由はありません。

ビルド用に構成する場合、プロジェクト構成には約6行のシェルスクリプトがあり、ほとんどの場合、xcodebuildを呼び出し、-projectおよび-configuration引数を渡します。

例:

cd ${WORKSPACE}/Engineering/

set -e
set -v

xcodebuild -project foo.xcodeproj -alltargets -configuration Distribution clean
xcodebuild -project foo.xcodeproj -alltargets -configuration Release clean
xcodebuild -project foo.xcodeproj -alltargets -configuration Debug clean

xcodebuild -project foo.xcodeproj -alltargets -configuration Distribution
xcodebuild -project foo.xcodeproj -alltargets -configuration Release
xcodebuild -project foo.xcodeproj -alltargets -configuration Debug

スレーブをサービスとして実行するようにまだ設定していません。これはTODOリストにあります。今のところ、ミニを再起動するたびにJNLP経由で起動します。

リポジトリはSVNであり、ハドソンマスターがhttps認証情報の記憶を処理します。

Email-ext プラグインを積極的に使用しており、システムを使用している他の人が多く、一部のビルドが正常に動作しないため、ビルドタイムアウトプラグインと監査証跡プラグインがあります。 警告 プラグインと 静的コード分析プラグイン についても簡単に実験しましたが、それらをより多くのプロジェクトで使用する必要があります(通常、ビルドのエラーとして警告が表示されますが、一部のプロジェクトではPC-Lintやその他のツールを使用しています。ここで出力を集約して追跡することは非常に素晴らしいことです)。最後に、最も重要な Chuck Norris および Emotional Hudson プラグイン。

現在、どのiphoneビルドでも単体テスト(残念!)を実行しておらず、ビルドを保存するためにハドソンに組み込まれている通常の「アーティファクトのアーカイブ」機能を使用しています。これらには、hudsonWebインターフェイスを介して許可されたユーザーからアクセスできます。フレームワーク内で単体テストを実行するのは難しくないことは間違いありません。

</ fanboy>

私たちの唯一の本当の問題は、AFPとSMB-ハドソンとはまったく関係がなく、内部ネットワークインフラストラクチャだけです。ミニは少し遅いです。私の好み-私たちは通常、迅速な自動ビルドのターンアラウンドが良いことであるという理論に基づいて、かなり頑丈なビルドスレーブを実行します。この理由から、ある時点でminiにSSDが贈られる可能性があります。

14
leander

このスレッドが最後に更新されてからしばらく経ちましたが、それ以来、新しい継続的インテグレーション(CI)サーバーに出くわしました。または、実際には新しいものではありませんが、Mac/IOSビルドの統合サポートは新しいものです:)

JetBrainsのTeamCity製品は http://www.jetbrains.com/teamcity/ で入手できます。

Javaプロジェクトをビルドするために働いているクライアントで正常に使用していますが、IOSビルドのセットアップも大部分になりつつあるため、使用します私たちの製品範囲の。

セットアップはかなり簡単で、どのプラットフォームでも実行できますが、buildagentはMacコンピューターを実行する必要があります。

お役に立てれば :)

新しいオプションの1つは、Mac OS X 10.9(Mavericks)およびOS XServerと組み合わせたXcode5です。 OS X Serverには、自動テストの実行に適したXcodeサーバーコンポーネントが含まれるようになりました。

それができること:

  1. ビルド(+警告を確認)
  2. 分析(つまり、clang静的分析)
  3. IOSシミュレーターとUSBで接続されているすべての接続デバイスでテストを実行します

デバイスでテストを実行する場合、jenkins/hudsonに勝って、セットアップが非常に簡単です。ただし、Xcodeサーバー(Xcode 5.1以降)は完全にカスタマイズできません-パフォーマンス/メモリ使用量などのカスタムグラフを追加したい場合はできません-その種のパワーについては、jenkins/Hudsonの方がはるかに優れています。

0
JosephH