2014-09-03 32 views
5

我们使用詹金斯作为我方的iOS团队具有以下设置CI服务器:在OSX詹金斯的iOS生成使用证书和开发人员配置

  • 主服务器,而不是在OSX
  • 两个从正在运行的任何工作运行我们的集成作业+ UI测试

目前所有签约的身份和提供配置文件的应用程序被上传每个从属这使得政府可能有些乏味和添加新节点,以更加痛苦集群。

要解决这一点,我们已经研究过使用证书插件与开发者配置文件,并导入配置文件作为所有iOS作业的第一生成步骤,但都面临着对主要问题:

  • 进口开发商配置文件似乎第一次工作(至少对于创建密钥链条目),但即使开发人员配置文件包含目标所需的所有配置配置文件,作业也会失败并显示“没有匹配的配置文件”错误。
  • 在同样的工作第二次运行总是失败,一个“钥匙扣已经存在”错误

我们已经尝试了第二个问题加一个外壳生成步骤去除特定钥匙扣一些变通,但仍然面临着第一个错误。如果我们手动将配置文件安装在构建过程的从属设备上,但这会破坏使用凭据插件的目的。

你们认为什么?

回答

6

我认为在导入之前,凭证插件的最新版本现在首先使用匹配的名称删除任何现有的钥匙串,如下面的日志输出所示。

$ security delete-keychain jenkins-MyAppsBuildName-iOS 
$ security create-keychain -p ******** jenkins-MyAppsBuildName-iOS 
$ security unlock-keychain -p ******** jenkins-MyAppsBuildName-iOS 

由于这个事实,我认为你不会再有第二次运行时出现重复钥匙串错误的问题。

只要找不到与供应配置文件有关的问题,请在execute shell命令中添加以下行并在jenkins上运行构建。

security list-keychains 

看看控制台为特定的构建,你应该看到所有目前在外壳的范围钥匙扣的列表。

如果您没有看到“jenkins-MyAppsBuildName-iOS”作为列出的钥匙串,这就是为什么您有签名问题。由于钥匙串没有列出,它甚至从来没有被搜索过,找到正确的签名身份/配置文件。

解决方案:警告:这是哈克

我不是100%肯定,为什么发生这种情况,但是从其他线程这似乎是一个权限问题。

幸运的是,有一个简单的解决方法。

在执行shell命令添加以下内容:

security list-keychain -s jenkins-${JOB_NAME} 

这将重置钥匙串列表,包括成功建设项目所需的钥匙串。

要验证这现在列出正确的钥匙链,你可以添加以下行到shell命令:

security list-keychain 
security list-keychain -s jenkins-${JOB_NAME} 
security list-keychain 

现在与第二列表钥匙扣命令比较第一个列表,钥匙扣命令的输出在控制台。确保jenkin的构建钥匙串在第二个安全列表 - 钥匙串输出后列出。

警告:这将永久更改系统上的钥匙串列表,因此在构建完成后重置钥匙串可能是一个好主意。您可以通过在Jenkin的“系统配置”部分的xcode配置中设置默认的期望钥匙串值来实现此目的。完成后,请确保在Jenkins作业页面内的构建环境下勾选“在全局配置中定义的构建过程后还原OS X钥匙串”复选框。

附加信息:在我的例子中,我设定的钥匙串名单只包括从詹金斯产生的钥匙扣,但你可以决定还包括标准体系和登录钥匙串的通过修改该行,例如:

security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain 

关键词:詹金斯,iOS设备,从设备,节点,Xcode中,插件,凭证,.developerprofile

+0

只是有一点补充:如果你的工作名称有像我做的空间(这通常是一个坏主意),你会需要将钥匙串名称放在引号中,例如'security list-keychain -s“jenkins - $ {JOB_NAME}”' – zbu 2015-08-05 07:13:41