我认为最新版本的凭据插件现在首先会在导入之前删除任何现有的具有匹配名称的钥匙串,如下面的日志输出所示。
$ security delete-keychain jenkins-MyAppsBuildName-iOS
$ security create-keychain -p ******** jenkins-MyAppsBuildName-iOS
$ security unlock-keychain -p ******** jenkins-MyAppsBuildName-iOS
由于这个事实,我认为您在第二次运行时不会再遇到重复钥匙串错误的问题。
至于未找到与配置文件相关的问题,请在执行 shell 命令中添加以下行并在 jenkins 上运行构建。
security list-keychains
查看该特定构建的控制台,您应该会看到当前在 shell 范围内的所有钥匙串的列表。
如果您没有看到“jenkins-MyAppsBuildName-iOS” 作为列出的钥匙串,这就是您遇到签名问题的原因。由于未列出钥匙串,因此甚至从未搜索过它以找到正确的签名身份/配置文件。
解决方案: 警告:这很hacky
我不是 100% 确定为什么会发生这种情况,但从其他线程来看,这似乎是权限问题。
幸运的是,有一个简单的方法可以解决这个问题。
在执行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 的构建钥匙串列在第二个 security list-keychain 输出之后。
警告:这将永久更改系统上的钥匙串列表,因此在构建完成后重置钥匙串可能是个好主意。您可以通过在 Jenkins 的系统配置部分内的 xcode 配置中设置默认的所需钥匙串值来完成此操作。完成此操作后,请务必在 Jenkins 作业页面内的构建环境下勾选“在构建过程后按照全局配置中定义的方式恢复 OS X 钥匙串”复选框。
其他信息: 在我的示例中,我将 keychain-list 设置为仅包含从 Jenkins 生成的钥匙串,但您可以通过修改该行来决定还包含标准系统和登录钥匙串:
security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain
关键字:Jenkins、iOS、slave、节点、Xcode、插件、凭据、.developerprofile