为iphone应用程序设置自动构建服务器的最佳实践?

Jos*_*phH 43 iphone build-automation automated-tests objective-c ipad

我正在寻找为我们的iPhone应用程序设置自动夜间构建服务器,并寻找有效和无效的建议.

基本上,至少每晚运行所有单元测试并向我们的内部网站发布新的特殊构建.

所有开发人员都使用笔记本电脑(将在一夜之间关闭),因此我正在考虑购买专用的Mac Mini来实现这一目标.

我不确定我是否应该购买标准的Mac OS X或服务器版本.

至少对于第一次尝试,我正在考虑使用从crontab运行的简单shell脚本来完成实际工作.将来,一个完整的持续集成服务器(哈德森等)会很好.

我已经通过搜索找到了一些文章,尽管它们非常简短:

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问题有一些有用的软件信息(虽然现在已经两年了):

Xcode项目的持续集成?

人们可以提供有关他们如何设置构建服务器以及任何潜在问题的任何指导,我们将不胜感激.

谢谢!

约瑟夫

lea*_*der 14

哈德森(或其分叉詹金斯)真的不难建立; 这是我们内部使用的.我们不只是从它运行iphone构建 - 实际上,只有一个单独的mac mini设置用于iphone构建,而且它是一个相对新近的添加.一段时间以来,我们已经为其他不同的平台安装了六个其他奴隶.

您可以通过Meet Hudson页面上的"Test Drive"链接进行播放,以了解设置的简便程度.(这是卖给我的东西之一;它很容易上手,但仍然可配置,可扩展,功能强大,足以让我们在过去几年中不断扩展.它取代了一堆真正的手 - 滚动的脚本和程序,尽管是作者,我很高兴看到安息.)

我们在一个强大的Mac OSX服务器上运行hudson后端,但没有理由你不能在任何地方运行它(linux,windows,mac).

至于为构建配置它 - 在项目配置中大约有6行shell脚本,主要是调用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
Run Code Online (Sandbox Code Playgroud)

我们还没有将slave设置为作为服务运行 - 这是在TODO列表中.现在我们只要重新启动mini就可以通过JNLP启动它.

存储库是SVN,哈德森主人负责记住我们的https身份验证信息.

我们积极使用Email-ext插件,并有一个构建超时插件和审计跟踪插件,因为有很多其他人使用该系统,并且一些构建不是很好.我们已经对Warnings插件和静态代码分析插件进行了简单的实验,需要在更多项目中使用它们(我们通常在构建中将警告作为错误,但我们在某些项目中使用PC-Lint和其他工具;输出聚合和跟踪这里是非常好的).最后是最重要的Chuck NorrisEmotional Hudson插件.

我们目前没有在任何iphone版本上运行单元测试(羞耻!),我们只是使用hudson内置的普通"归档工件"功能来存储构建.这些可以通过hudson Web界面通过授权用户访问.我毫不怀疑你在框架内运行单元测试并不困难.

</变形金刚迷>

我们唯一真正的问题与mac mini上的AFP和SMB有关 - 与hudson完全没有关系,更多的是我们的内部网络基础设施.而mini对我的口味来说有点慢 - 我们通常运行相当强壮的构建奴隶,因为快速自动转换是一件好事.出于这个原因,迷你可能会在某种程度上被赋予SSD.


小智 6

我意识到自从这个线程上次更新以来已经有一段时间了,但从那时起我就遇到了一个新的连续集成(CI)服务器.或者实际上它不是新的,但它对Mac/IOS构建的集成支持是新的:)

JetBrains的TeamCity产品可在http://www.jetbrains.com/teamcity/获得.

我们在我为建立Java项目工作的客户端成功使用它,但我们也将为IOS构建设置,因为它正在成为我们产品系列的更大部分.

它相当容易设置并且可以运行任何平台,但构建者必须运行Mac计算机.

希望这可以帮助 :)