我们使用Jenkins作为我们iOS团队的CI服务器,具有以下设置:
目前,所有应用程序的签名身份和配置文件都会上传到每个从属设备,这使得管理过程繁琐,并且为群集添加新节点会更加痛苦。
为了解决这个问题,我们研究了如何在开发人员配置文件中使用凭据插件,并将配置文件作为所有iOS作业的第一个构建步骤导入,但面临主要问题:
我们已经尝试了第二个问题的工作,添加了一个shell构建步骤,删除了特定的钥匙串,但仍然面临第一个错误。如果我们在slave上手动安装配置文件,那么构建会通过,但这会破坏使用凭据插件的目的。
你们有什么想法?
答案 0 :(得分: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
查看特定构建的控制台,您应该看到当前在shell范围内的所有钥匙串的列表。
如果您没有看到" jenkins-MyAppsBuildName-iOS" 作为列出的钥匙串,这就是您遇到签名问题的原因。由于未列出钥匙串,因此甚至不会通过搜索来找到正确的签名身份/个人资料。
解决方案: 警告:它是hacky
我不是百分之百确定为什么会发生这种情况,但是从其他线程看,它似乎是一个权限问题。
幸运的是,有一个简单的方法。
在execute shell命令中添加以下内容:
security list-keychain -s jenkins-${JOB_NAME}
这将重置钥匙串列表,以包含成功构建项目所需的钥匙串。
要验证现在是否列出了正确的钥匙串,您可以将以下行添加到shell命令中:
security list-keychain
security list-keychain -s jenkins-${JOB_NAME}
security list-keychain
现在将第一个list-keychain命令的输出与控制台中的第二个list-keychain命令进行比较。确保在第二个安全列表 - 钥匙串输出后列出了jenkin的构建钥匙串。
警告:这将永久更改系统上的钥匙串列表,因此在构建完成后重置钥匙串可能是个好主意。您可以通过在Jenkin系统配置部分的xcode配置中设置默认的所需钥匙串值来完成此操作。执行此操作后,请务必选中复选框"在全局配置"中定义的构建过程后恢复OS X钥匙串。在Jenkins工作页面内的构建环境下。
其他信息:在我的示例中,我将keychain-list设置为仅包含Jenkins生成的keychain,但您可以决定还通过修改包含标准系统和登录密钥链这样的界线:
security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain
关键字:Jenkins,iOS,slave,node,Xcode,插件,凭据,.developerprofile