使用远程Mac Mini在Jenkins上进行代码签名

时间:2015-12-06 15:24:18

标签: ios macos jenkins jenkins-plugins

我的配置。

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

我相信我拥有一个单独的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,但它描述了手动复制配置文件并将密钥从“登录”移动到“系统”。它没有考虑远程服务器。它似乎是一个暂时的黑客,解决插件设计首先解决的问题!

1 个答案:

答案 0 :(得分:0)

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

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

  • 插件提供了keychain
  • ci用户的钥匙串
  • system keychain

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

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

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

相关问题