苹果CI / Xcode服务和jenkins

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

为什么?

Jenkins服务器+通过ssh连接的OSX构build从站的一个主要问题是unit testing不起作用 ,因为iOS模拟器需要一个graphics化的环境,在这个configuration中不存在。

我希望有可能将Xcode服务(支持unit testing)与Jenkins集成在一起。

这可能是因为使用Apple CI足以满足我的需求,但是这个问题的目标是将Xcode服务与Jenkins集成在一起

我所知道的

我有现有的Xcode Jenkins插件的经验,但似乎不支持全新的Xcode服务或新的Apple CI。 我特别热衷于通过CI进行unit testing(在旧式的ssh会话中不能正常工作)。

我想知道的

我想知道下面的问题目前不与jenkins和ssh连接生成奴隶:

  • unit testing无头系统
  • 验收testing与弗兰克或类似的
  • 自动configurationconfiguration文件更新(Apple CI这样做)

关于目前Jenkins和ssh连接的构build奴隶工作正常的信息仍然应该与Xcode服务集成一起工作:

  • 构build不同的构buildconfiguration(Release,Debug,TestFlight)/scheme
  • 自动build立数字增量
    • (使用Jenkins我可以将我的项目中的内部版本号设置为${BUILD_NUMBER} ,Jenkins根据内部版本号设置这个环境variables。当Apple CI进行构build时,它可能会设置内部版本号。)
    • 处理/同步Jenkins和Apple CI之间的版本号
  • 从不同的Jenkins Jobs访问Apple CI的构build产品
    • 例如一个工作上传到TestFlight
  • 构build的备份
  • 自动build立在git推到特定的分支
  • 电子邮件通知

一些额外的问题/提示

  • 我不确定Apple CI == Xcode service或者Apple CI是否使用 Xcode服务。 在后一种情况下,Xcode服务就像是一个智能的构build奴隶,Jenkins也许可以使用它来构build和testing,但是自己pipe理构build数量和产品。
  • 我意识到,苹果CI是一个独立的CI,并且将几个CI彼此集成在一起并不是最容易或最有用的方式。 我只是担心苹果公司对我的需求不够灵活(见上文),jenkins的老办法也有一些问题(见上文)。

我相信你将不得不selectjenkins或Xcode服务器,而不是两个。 我不太了解xcode服务器,但是我知道jenkins和xcode 5。

用不同的configuration构build

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

自动构build数量增量

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

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

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

unit testing

我没有成功地使用Xcode5进行unit testing,但我知道jenkins的xcode插件支持它。 我相信在项目设置中没有“testing后生成”键可能与它有关。 如果你使它工作,我很想知道。 (我也热衷于做这个工作)

验收testing

据我所知,弗兰克是一个命令行工具。 你可以很容易地把它集成到Jenkins的工作中,如果你的testing不通过,我相信它会失败。

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

不完全确定你的意思,但与jenkins,你可以存档你的构build产品(.ipa),以供以后下载并上传到像testflight这样的服务。 再次,我不太了解Xcode服务器(CI)。

构build的备份

正如我之前所说,jenkins可以存档您的构build产品。 另外,我在构build产品目录中使用$ {BUILD_NUMBER}variables,因此每个构build都有一个不同的目录。 这个目录也被备份到我的Time Machine中,重要的版本被复制到我的Web目录中。

自动build立在git推到特定的分支

使用jenkins git插件,您可以让jenkins在您指定的时间间隔内对您的scm进行轮询,并可以根据变更触发构build。

电子邮件通知

我相信这是一个插件。 (在构build失败/成功的时候给你发电子邮件,事实上,这可能是内置的)

闭幕

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

我在我的OS X版本的slave上使用Xcode 5在Jenkins中运行unit testing。 而不是使用Xcode插件,我作为执行shell构build步骤运行:

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

除了“ 生成testing覆盖率报告”设置为“是” ,“ 仪器程序stream量”设置为“是”之外,我的覆盖configuration与“debugging”configuration完全相同。 这样做是为了创buildtesting覆盖率文件。 由于Xcode 5中的一个错误,我调用__gcov_flush(); 在我所有的testing撕下。 我把这个xcodebuild命令的输出inputocunit2junit中 ,以便在Jenkins中获得testing报告。