【问题标题】:Code signing on Jenkins with remote Mac Mini使用远程 Mac Mini 在 Jenkins 上进行代码签名
【发布时间】:2015-12-07 01:37:33
【问题描述】:

我的配置。

显然,我正在尝试在远程服务器上进行代码签名。

我相信,我拥有个人 Apple 开发者帐户这一事实意味着我无法向其他开发者颁发“许可”来处理我的项目,并且该节点不能只拥有自己的 Apple ID。

按照插件说明,我认为“配置文件”部分是正确的。

钥匙链显然不起作用。起初我上传了 .cert 和 .p12 文件,但上传时出错。然后我上传了它成功解析的整个 login.keychain。我给它钥匙串密码。右键单击钥匙串管理器中的钥匙时,我从“信息”部分窃取了“身份”字符串; “iPhone 开发者:William Guynes (XXXXXXXXXX)”。上传成功后,我无法知道其他两个字段是否正确。我相信所需的密码是 login.keychain 密码,但字段描述有点模糊。我发现了一个“身份”字符串的部分模糊示例,但我在猜测从哪里得到它。

这不是我的密钥是我的用户名和 Jenkins 使用“Jenkins”用户名的情况。当作业被推送到远程时,它以名为“ci”的用户身份运行。我可以给 ci 任何需要的权限,包括直接操作它的钥匙串。我还没有让它工作,但我觉得首先使用插件不需要像这样的解决方法。

当前构建输出:

Console Output

Started by user William Guynes
Building remotely on mini (osx) in workspace /Users/ci/workspace/websocketclient
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url ssh://lion.guynes.net/var/git/WebSocketClient.git/ # timeout=10
Fetching upstream changes from ssh://lion.guynes.net/var/git/WebSocketClient.git/
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git -c core.askpass=true fetch --tags --progress ssh://lion.guynes.net/var/git/WebSocketClient.git/ +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 51c15eabd01c443ef6fee24cc755af60f706a4f0 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 51c15eabd01c443ef6fee24cc755af60f706a4f0
 > git rev-list 51c15eabd01c443ef6fee24cc755af60f706a4f0 # timeout=10
[websocketclient] $ /bin/bash /var/folders/54/kvd8ytzd6yl3d2y7zdxf_ygw0000gp/T/hudson2702132375138804077.sh
Executing do/all
Executing do/setup
Executing do/build
=== BUILD TARGET WebSocketClient OF PROJECT WebSocketClient WITH THE DEFAULT CONFIGURATION (Release) ===

Check dependencies
Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) were found.

** BUILD FAILED **

The following build commands failed:
    Check dependencies
(1 failure)
Executing do/test
Finished: SUCCESS

我花了一整天的时间在谷歌上搜索并试图找到答案。许多链接返回到this blog post,但它描述了手动复制配置文件并将密钥从“登录”移动到“系统”。它不考虑远程服务器。解决插件最初旨在解决的问题似乎是一种临时破解!

【问题讨论】:

    标签: ios macos jenkins jenkins-plugins


    【解决方案1】:

    我可以看到配置文件被插件复制到正确的路径中。 我还可以看到它将提供的 login.keychain 复制到工作空间/{jobname} 根目录。

    ci 用户需要将 login.keychain 添加到其搜索路径中。

    • 插件提供钥匙串
    • ci 用户的钥匙串
    • 系统钥匙串

    所以我改变了我的构建脚本。

    system_keychain='/Library/Keychains/System.keychain'
    keychain_list=$(security list-keychains)
    echo "${keychain_list}" | grep "${KEYCHAIN_PATH}"
    ec=$?
    if [[ ${ec} -ne 0 ]]
    then
       new_keychain_list=(
          ${KEYCHAIN_PATH}
          $(echo "${keychain_list}" | grep -v "${system_keychain}")
       )
       echo "Setting keychains to" ${new_keychain_list[*]}
       security list-keychains -s ${new_keychain_list[*]}
    fi
    

    如果提供的钥匙串不在搜索路径中,则将其添加到开头。系统在设置时总是固定在最后,因此在执行设置之前将其剥离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      相关资源
      最近更新 更多