Apple CI/Xcode服务和Jenkins

fab*_*abb 28 macos xcode continuous-integration ios jenkins

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

为什么?

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

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

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

我已经知道的了

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

我想知道什么

我想了解以下与Jenkins和ssh连接的构建奴隶无关的问题的信息:

  • 单元测试无头系统
  • 弗兰克或类似的验收测试
  • 自动配置配置文件更新(Apple CI执行此操作)

关于目前与Jenkins和ssh连接的构建从站一起工作的事情的信息仍然应该与Xcode服务集成一起工作:

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

一些额外的问题/提示

  • 我不确定Apple CI == Xcode serviceApple CI 是否只使用 Xcode服务.在后一种情况下,Xcode服务就像一个智能构建从属服务器,Jenkins可能会使用它来进行构建和测试,但是自己管理构建数量和产品.
  • 我知道Apple CI是一个单独的CI,并且将几个CI相互集成并不是最简单或最有用的方法.我只是担心Apple CI对我的需求不够灵活(见上文),并且与Jenkins的旧方式存在一些问题(见上文).

San*_*aus 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了解不多.


Mar*_*ark 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)"
Run Code Online (Sandbox Code Playgroud)

我的coverage配置与我的Debug配置完全相同,只是Generate Test Coverage Reports设置为YES,Instrument Program Flow设置为YES.这样做是为了创建测试覆盖文件.由于Xcode 5中的错误,我调用了__gcov_flush(); 在我所有测试的泪水中.我将此xcodebuild命令的输出传输ocunit2junit以获取Jenkins中的测试报告.