为iPhone应用程序设置自动构建服务器的最佳做法是什么?

43

我想要为我们的iPhone应用程序设置一个自动化的夜间构建服务器,并寻求关于哪些方法有效以及哪些方法无效的建议。

基本上,需要每晚至少运行所有单元测试并将新的adhoc版本发布到我们的内部网站。

所有开发人员都使用笔记本电脑(在过夜期间将关闭),因此我考虑购买一台专用的Mac Mini来完成这项工作。

我不确定是否应该获取标准的Mac OS X还是服务器版。

至少在第一次尝试中,我考虑只使用从crontab运行的简单shell脚本来执行实际工作。将来,完整的持续集成服务器(如Hudson等)会很好。

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

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

Continuous Integration for Xcode projects?

如果有人能够提供他们如何设置构建服务器以及任何潜在问题的指导,将不胜感激。

谢谢!

Joseph


Mac OS X服务器在编译方面并没有添加任何特殊的东西。 - Seth
@shader 看起来你已经删除了那段内容。 - ThomasW
3个回答

14
(或其分支Jenkins)实际上很容易设置;这是我们内部使用的工具。我们不仅仅从它运行iPhone编译 - 实际上,只有一台孤独的Mac mini用于iPhone编译,并且它是最近才添加的。我们已经在另外六个平台上使用了半打其他从机。

你可以通过Meet Hudson页面上的“测试驱动”链接来体验其易于设置的感觉。(这是其中一个让我买单的原因;它真的很容易入手,但仍然可配置、可扩展,足以让我们在过去几年里不断扩张。它取代了一堆笨重的手动脚本和程序,尽管它们是作者,但我非常高兴看到它们被淘汰。)

我们将Hudson后端运行在一台强大的Mac OSX服务器上,但你可以将其运行在几乎任何地方(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

我们还没有设置从机作为服务运行——这在待办事项列表中。目前,我们只是通过JNLP启动它,每当我们重新启动它所在的mini时。

代码库是SVN,而Hudson主控会记住我们的https认证信息。

我们积极使用Email-ext插件,并且有一个构建超时插件和审计追踪插件,因为有很多其他人使用系统,而一些构建并不良好。我们也尝试过Warnings插件和Static Code Analysis plugins,需要在更多项目上使用它们(我们通常将警告作为构建错误,但我们确实在一些项目上使用PC-Lint和其他工具;在此聚合和跟踪输出非常好)。最后是非常重要的Chuck NorrisEmotional Hudson插件。

我们目前没有在任何 iPhone 构建上运行单元测试(遗憾!),我们只是使用内置在 Hudson 中的普通“存档构建”功能来存储构建。这些可以通过授权的用户通过 Hudson web 接口访问。我相信你很容易在框架内运行你的单元测试。

</fanboy>

我们唯一真正的问题与 Mac mini 上的 AFP 和 SMB 有关--这与 Hudson 没有任何关系,更多的是我们内部网络基础设施的问题。而且 Mini 对我的口味来说有点慢--我们通常会在强大的构建从机上运行,因为快速的自动构建周转时间是一件好事。Mini 可能会被赠送一个 SSD,因为这个原因。


值得一提的是:Hudson从其Web界面生成的.zip文件是 不可提交 的!这与符号链接信息未被保留有关。您必须使用Finder构建最终提交到应用商店的zip文件,或者找出如何在构建脚本中执行zip并具有正确选项以保留链接和权限。 - leander
1
嗨,Leander,我刚开始自己设置这个。我遇到了以下博客文章,想知道它是否有助于保留符号链接信息:http://silent-code.blogspot.com/2009/07/iphone-app-distribution-made-easy-part_1466.html - nazbot

6

我意识到这个帖子已经有一段时间没有更新了,但是自那时以来,我发现了一个新的持续集成(CI)服务器。实际上它不是新的,但是它对Mac/IOS构建的支持是新的:)

这是JetBrains的TeamCity产品,可以在http://www.jetbrains.com/teamcity/上获得。

我们在客户端成功地使用它构建Java项目,但我们也将为IOS构建设置进行配置,因为这正在成为我们产品范围的重要组成部分。

它相当容易设置,并且可以在任何平台上运行,但是构建代理必须在Mac计算机上运行。

希望这可以帮助您 :)


0

一个新的选择是使用 Xcode 5 结合 Mac OS X 10.9(Mavericks)和 OS X Server。现在,OS X Server拥有了 Xcode 服务器组件,适用于运行自动化测试。

它可以执行以下操作:

  1. 构建(+检查警告)
  2. 分析(即clang静态分析)
  3. 在iOS模拟器上运行测试 + 所有通过USB连接的设备

对于在设备上运行测试,它比jenkins / hudson更简单易设置。然而Xcode服务器(截至Xcode 5.1)是完全不可定制的 - 如果您想要添加性能/内存使用情况/任何其他自定义图形等功能,则无法使用该工具,对于这种强大的需求,jenkins / Hudson 更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接