29

有没有办法/插件将新的 Xcode 服务和/或新的 Apple CI 与 Jenkins 集成?

为什么?

连接 Jenkins 服务器 + OSX 构建从站的一个主要问题ssh单元测试不起作用,因为 iOS 模拟器需要此配置中不存在的图形环境。

我希望可以将 Xcode 服务(支持单元测试)与 Jenkins 集成。

可能使用 Apple CI 就足以满足我的需求,但这个问题旨在将 Xcode 服务与 Jenkins 集成

我已经知道的

我有使用现有 Xcode Jenkins 插件的经验,但它似乎不支持全新的 Xcode 服务或新的 Apple CI。我特别热衷于通过 CI 进行单元测试(在旧方式的 ssh 会话中无法正常工作)。

我想知道的

我想了解以下当前无法与 Jenkins 和ssh连接的构建从站一起使用的问题的信息:

  • 无头系统上的单元测试
  • 与Frank或类似人员进行的验收测试
  • 自动配置文件更新(Apple CI 会这样做)

以及有关当前在 Jenkins 和ssh连接的构建从站上可以正常工作并且仍应与 Xcode 服务集成一起工作的信息:

  • 不同构建配置的构建(发布、调试、TestFlight)/方案
  • 自动内部版本号增量
    • (使用 Jenkins,我可以将项目中的内部版本号设置为${BUILD_NUMBER},并且 Jenkins 根据其内部版本号设置此环境变量。当 Apple CI 进行构建时,它很可能会设置内部版本号。)
    • Jenkins 和 Apple CI 之间内部版本号的处理/同步
  • 从不同的 Jenkins Jobs 访问 Apple CI 的构建产品
    • 例如,将作业上传到 TestFlight
  • 构建备份
  • 在 git push 上自动构建到特定分支
  • 电子邮件通知

一些额外的问题/提示

  • 我不确定Apple CI == Xcode serviceApple CI 是否仅使用Xcode 服务。在后一种情况下,Xcode 服务就像一个智能构建奴隶,詹金斯也许可以使用它来进行构建和测试,但它自己管理构建号和产品。
  • 我知道 Apple CI 是一个单独的 CI,将多个 CI 相互集成并不是最简单或最有用的方法。我只是担心 Apple CI 不够灵活,无法满足我的需求(见上文),并且 Jenkins 的旧方法存在一些问题(见上文)。
4

2 回答 2

14

我相信您将不得不选择 jenkins 或 xcode 服务器,而不是两者。我不太了解 xcode 服务器,但我确实了解 jenkins 和 xcode 5。

使用不同的配置构建

在 xcode 插件中,您可以设置要使用的方案。

自动构建编号增量

我在我的 jenkins 作业中添加了一个名为 XCODEBUILDNUMBER 的参数。每当我开始构建时,我只需将构建号从我的 xcode 项目中复制出来(我手动递增它。我的看起来像 080813A)并将其粘贴到 XCODEBUILD 参数中。我用它来命名我的输出文件等。jenkins 的插件可以自动增加你的内部版本号,但它们不集成,也不与 xcode 同步。

Jenkins 和 Apple CI 之间内部版本号的处理/同步

正如我之前所说,我不知道同步内部版本号的方法,但我只是想到了一个可能的解决方案。您可以使用命令行工具plistbuddy在 info.plist 中设置构建号,作为 jenkins 作业中的构建步骤。

单元测试

我还没有成功地使单元测试与 Xcode5 一起工作,但我知道 jenkins 的 xcode 插件支持它。我相信项目设置中缺少“Test After Build”键可能与此有关。如果你让它工作,我很想知道。(我也热衷于制作这项工作)

验收测试

据我所知,Frank 是一个命令行工具。您可以轻松地将其集成到您的 Jenkins 工作中,并且我相信如果您的测试未通过,它将导致构建失败。

从不同的 Jenkins Jobs 访问 Apple CI 的构建产品

不完全确定您的意思,但是使用 jenkins,您可以存档您的构建产品(.ipa),以便以后下载并上传到像 testflight 这样的服务。同样,我对 Xcode Server (CI) 了解不多。

构建备份

正如我之前所说,jenkins 可以归档您的构建产品。另外,我在构建产品目录中使用了 ${BUILD_NUMBER} 变量,因此每个构建都有不同的目录。这个目录也备份到我的 Time Machine,重要的构建复制到我的 web 目录。

在 git push 上自动构建到特定分支

使用 jenkins git 插件,您可以让 jenkins 在您指定的时间间隔内轮询您的 scm,并可以在更改时触发构建。

电子邮件通知

我确信有一个插件。(当构建失败/成功时向您发送电子邮件。事实上,这可能是内置的)

结束时

xcode CI 是一个完全独立的 CI,可能很难与 jenkins 集成。就个人而言,我会推荐 jenkins 仅仅是因为它的可扩展性。抱歉,我对 Xcode Server 不太了解。

于 2013-08-08T14:46:35.190 回答
6

我在我的 OS X 构建从站上使用 Xcode 5 在 Jenkins 中运行单元测试。我没有使用 Xcode 插件,而是作为执行 shell 构建步骤运行:

xcodebuild test -scheme <scheme> -configuration Coverage -sdk iphonesimulator7.0 -destination OS=7.0,name="iPhone Retina (4-inch)"

我的覆盖配置与我的调试配置完全相同,除了Generate Test Coverage Reports设置为YESInstrument Program Flow设置为YES。这样做是为了创建测试覆盖率文件。由于 Xcode 5 中的一个错误,我调用了 __gcov_flush(); 在我所有测试的拆解中。我将此xcodebuild命令的输出通过管道传输到ocunit2junit以在 Jenkins 中获取测试报告。

于 2013-12-12T14:49:01.203 回答