Jenkins iOS使用凭据和开发人员配置文件构建

Eri*_*net 5 ios jenkins

我们使用Jenkins作为我们iOS团队的CI服务器,具有以下设置:

  • OSX上的主服务器,没有运行任何作业
  • OSX上的2个从站运行我们的集成作业+ UI测试

目前,应用程序的所有签名身份和配置文件都被上传到每个从属设备,这使得管理过程繁琐,并且向集群添加新节点更加痛苦.

为了解决这个问题,我们研究了如何在开发人员配置文件中使用凭证插件,并将配置文件作为所有iOS作业的第一个构建步骤导入,但是面临主要问题:

  • 导入开发人员配置文件似乎是第一次工作(至少用于创建钥匙串条目),但是即使开发人员配置文件包含目标所需的所有配置文件,作业也会因"无匹配的配置文件"错误而失败.
  • 在同一作业上的第二次运行总是失败,并且"Keychain has exist"错误

我们尝试了一些解决第二个问题的方法,添加一个shell构建步骤,删除特定的钥匙串,但仍然面临第一个错误.如果我们在slave上手动安装配置文件,则构建会通过,但这会破坏使用凭据插件的目的.

你们有什么感想?

njt*_*man 6

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

$ security delete-keychain jenkins-MyAppsBuildName-iOS
$ security create-keychain -p ******** jenkins-MyAppsBuildName-iOS
$ security unlock-keychain -p ******** jenkins-MyAppsBuildName-iOS
Run Code Online (Sandbox Code Playgroud)

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

至于找不到与配置文件相关的问题,在execute shell命令中添加以下行并在jenkins上运行构建.

security list-keychains
Run Code Online (Sandbox Code Playgroud)

查看特定构建的控制台,您应该看到当前在shell范围内的所有钥匙串的列表.

如果您没有将"jenkins-MyAppsBuildName-iOS"视为列出的钥匙串,那么这就是您遇到签名问题的原因.由于未列出钥匙串,因此甚至不会通过搜索来找到正确的签名身份/配置文件.

解决方案: 警告:这很糟糕

我不是百分之百确定为什么会发生这种情况,但是从其他线程看,这似乎是一个权限问题.

幸运的是,这有一个简单的方法.

在execute shell命令中添加以下内容:

security list-keychain -s jenkins-${JOB_NAME}
Run Code Online (Sandbox Code Playgroud)

这将重置钥匙串列表以包括成功构建项目所需的钥匙串.

要验证这现在是否列出了正确的钥匙串,您可以将以下行添加到shell命令:

security list-keychain
security list-keychain -s jenkins-${JOB_NAME}
security list-keychain
Run Code Online (Sandbox Code Playgroud)

现在将第一个list-keychain命令的输出与控制台中的第二个list-keychain命令进行比较.确保在第二个安全列表 - 钥匙串输出后列出了jenkin的构建钥匙.

警告:这将永久更改系统上的钥匙串列表,因此在构建完成后重置钥匙串可能是个好主意.您可以通过在Jenkin的"系统配置"部分的xcode配置中设置默认的所需钥匙串值来完成此操作.执行此操作后,请务必在Jenkins作业页面内的构建环境下勾选"在全局配置中定义的构建过程后恢复OS X钥匙串"复选框.

附加信息: 在我的示例中,我将keychain-list设置为仅包含Jenkins生成的keychain,但您可以通过修改行来决定还包括标准系统和登录keychain:

security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain
Run Code Online (Sandbox Code Playgroud)

关键字:Jenkins,iOS,slave,node,Xcode,插件,凭证,.developerprofile