【问题标题】:Jenkins iOS build using credentials and developer profileJenkins iOS 使用凭证和开发者资料构建
【发布时间】:2015-04-15 23:42:45
【问题描述】:

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

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

目前,应用程序的所有签名身份和配置文件都上传到每个从属服务器,这使得管理有点乏味,向集群添加新节点更加痛苦。

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

  • 导入开发人员配置文件似乎第一次工作(至少用于创建钥匙串条目)但作业失败并出现“没有匹配的配置文件”错误,即使开发人员配置文件包含目标所需的所有配置文件.
  • 在同一作业上第二次运行总是失败并出现“钥匙串已存在”错误

我们针对第二个问题尝试了一些变通方法,添加了一个 shell 构建步骤来删除特定的钥匙串,但仍然面临第一个错误。如果我们在从属设备上手动安装配置文件,则构建通过,但这违背了使用凭据插件的目的。

你们觉得呢?

【问题讨论】:

    标签: ios jenkins


    【解决方案1】:

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

    $ 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

    【讨论】:

    • 只需添加一件事:如果您的工作名称像我一样有空格(这通常是个坏主意),您需要将钥匙串名称放在引号中,例如 security list-keychain -s "jenkins-${JOB_NAME}"
    猜你喜欢
    • 2012-12-02
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2018-04-26
    • 2015-05-13
    • 2021-01-05
    相关资源
    最近更新 更多