(或其分支
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 Norris和Emotional Hudson插件。
我们目前没有在任何 iPhone 构建上运行单元测试(遗憾!),我们只是使用内置在 Hudson 中的普通“存档构建”功能来存储构建。这些可以通过授权的用户通过 Hudson web 接口访问。我相信你很容易在框架内运行你的单元测试。
</fanboy>
我们唯一真正的问题与 Mac mini 上的 AFP 和 SMB 有关--这与 Hudson 没有任何关系,更多的是我们内部网络基础设施的问题。而且 Mini 对我的口味来说有点慢--我们通常会在强大的构建从机上运行,因为快速的自动构建周转时间是一件好事。Mini 可能会被赠送一个 SSD,因为这个原因。