GBe*_*gen 11 xcode unit-testing objective-c ios jenkins
我们一直在使用Jenkins和Xcode插件来运行iOS应用程序的持续集成,包括自动执行和单元测试报告.这在Linux机器和运行Xcode 4.6.3的Mac从机上使用Jenkins运行良好.
现在我们正在寻求将设置更新为Xcode 5以支持目标iOS 7并遇到以下问题.
首先,单元测试根本不会运行,因为我们正在使用Xcode 4中不再受Xcode 4支持的RunUnitTests脚本.我按照Xcode的建议解决了这个问题,通过使用适当的方案设置工作区.测试目标.
然后我配置了Jenkins作业的Xcode步骤,并设置了自定义xcodebuild参数,test -destination platform=${DESTINATION_PLATFORM},name=${DESTINATION_NAME},OS=${DESTINATION_OS}
以使其运行单元测试.
如果我运行xcodebuild命令行,Jenkins的Xcode插件在我自己的机器上的Terminal中运行,则单元测试运行,但是当Jenkins作业运行时,它会在尝试运行单元测试时失败或挂起.
我怀疑这是因为使用Xcode 5和测试buildaction而不是RunUnitTests脚本,单元测试现在在iOS模拟器中运行,这需要交互式会话,并且Jenkins从属进程正在通过Jenkins大师(Linux)的SSH运行.如果我使用Jenkins用于SSH的帐户登录到从属计算机,我可以看到iOS模拟器在单元测试运行时启动,但测试似乎没有运行且作业挂起.如果我没有登录到从机,则Jenkins作业无法运行单元测试.
有没有办法让iOS单元测试通过SSH在Jenkins从站上运行,如果没有,任何关于如何在项目必须使用Xcode 5构建时自动执行单元测试的建议?
GBe*_*gen 11
根据coffeebreaks的答案,我提出了一个完整的解决方案.
首先,无法使用SSH启动Mac从站,必须使用交互式会话手动启动,然后始终保持登录状态.在我的情况下,奴隶实际上是无头的,所以这是一个进一步的复杂化.
以下是我用来实现这一切的所有步骤.
在配置了唯一标签的Jenkins主机上创建一个新的从节点(我选择"xcode-unittests")并将启动方法设置为"通过Java Web Start启动从属代理".
通过屏幕共享(VNC)登录到Mac从站并启动从属代理.在我的情况下,我无法从浏览器启动奴隶,可能是因为我的浏览器没有运行applet所需的Java插件.因此我使用了命令行javaws http://{jenkins-host}/computer/{slave-name}/slave-agent.jnlp
.为了使其更加健壮,我将此命令配置为每次在系统首选项,用户和组,登录项下以交互方式登录计算机时自动运行.
退出屏幕共享而不退出Mac从站.这使得运行从属代理的交互式会话保持活动状态,即使没有人实际使用该机器.
为了在不提示用户的情况下运行单元测试,我还必须sudo DevToolsSecurity -enable
在Mac从站上运行.这允许Xcode与iOS模拟器进行交互,而无需每次都以交互方式请求许可.
如果从机重启,有人必须登录到Mac从机才能让奴隶代理再次运行.出于这个原因,我也将我的基于SSH的从属设备保持活动状态.我将Jenkins的工作拆分为单独的工作,用于构建应用程序和运行单元测试.用于构建应用程序的作业配置为在基于SSH的从属设备上运行,并且用于运行单元测试的作业配置为在上述交互式从属节点上运行.这样,如果交互式从站发生故障,只会影响单元测试,而不会影响产品构建.
归档时间: |
|
查看次数: |
7821 次 |
最近记录: |