Xcode 钥匙链赢得';除非用户登录,否则无法从Jenkins脚本解锁

Xcode 钥匙链赢得';除非用户登录,否则无法从Jenkins脚本解锁,xcode,macos,hudson,jenkins,keychain,Xcode,Macos,Hudson,Jenkins,Keychain,我在OSX机器上运行Jenkins CI服务器。服务器以标准用户“john”运行,并通过运行launchctl启动。此服务器所做的事情之一是使用存储在密钥链“XCode.keychain”中的密钥和证书构建XCode项目: Jenkins(根据activity monitor,它在用户“john”下运行)在用户按下web界面上的按钮时从脚本调用这些命令 security default-keychain -s /Users/john/Library/Keychains/xcode.keychai

我在OSX机器上运行Jenkins CI服务器。服务器以标准用户“john”运行,并通过运行launchctl启动。此服务器所做的事情之一是使用存储在密钥链“XCode.keychain”中的密钥和证书构建XCode项目:

Jenkins(根据activity monitor,它在用户“john”下运行)在用户按下web界面上的按钮时从脚本调用这些命令

security default-keychain -s /Users/john/Library/Keychains/xcode.keychain
security unlock-keychain -p password /Users/john/Library/Keychains/xcode.keychain
xcodebuild ...

如果我碰巧通过用户界面以“john”的身份登录到服务器,当Jenkins调用这些命令时,钥匙链将正确解锁。但是,如果我没有登录,xcode.keychain将不会解锁,构建将失败。有什么想法吗?

在没有启动的情况下运行詹金斯。我使用了以下命令:

sudo su jenkins -c "JENKINS_HOME=/Users/Shared/Jenkins/Home /Library/Application\ Support/Jenkins/jenkins-runner.sh"

我最近偶然发现了完全相同的问题

security list keychains-s/Users/john/Library/keychains/xcode.keychain
可能会解决您的问题。让我知道它是否有效

最近我在那里找到了一个解决方案:

你可以试试,另一种运行Jenkins的方法。它在用户会话中运行Jenkins,因此钥匙链应该不是问题。

我必须:

  • 右键单击构建过程中使用的密钥链中的私钥 他试图使用
  • 单击“获取信息”
  • 然后是“访问控制”选项卡
  • 您可以将特定应用程序(如“codesign”)添加到 允许访问该密钥,或者只允许从所有应用程序访问
  • 这为我澄清了一切

    这些评论中的更多信息:

    将所有密钥和证书移动到系统中。keychain解决了此问题。我猜这和Jenkins从launchctl运行有关,但仍然很好奇为什么它以前不工作。你到底是怎么做到的?我尝试复制您的解决方案,但仍然出现错误:(YMMV,但我只是按照上面的建议将密钥和证书移动到系统密钥链,这对我很有效。原因和解决方案在这里解释:将带有证书的密钥拖动到系统密钥链对我很有效,并且不需要在脚本中输入密钥链密码,谢谢!