针对遇到Jenkins类似问题的用户更新:
如果您设置了Mac以通过LaunchDaemons启动Jenkins,则需要确保添加以下内容:
<key>SessionCreate</key>
<true />
整个ci.plist文件应该如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>Jenkins</string>
<key>UserName</key>
<string>user</string>
<key>GroupName</key>
<string>staff</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-Xmx512m</string>
<string>-jar</string>
<string>/path/to/jenkins/jenkins.war</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>EnvironmentVariables</key>
<dict>
<key>JENKINS_HOME</key>
<string>/path/to/jenkins/home</string>
</dict>
<key>SessionCreate</key>
<true />
</dict>
</plist>
我一直遇到和上面许多人一样的问题。具体来说,当我从 Jenkins shell 脚本运行时,我也遇到了 "User interaction is not allowed" 的错误。但在 ssh shell 中运行脚本时,它可以正常工作。
大多数人注意到的区别是,如果您运行 "security list-keychain" 命令,则会得到:
$ security list-keychain
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"
但是在ssh shell中运行时,我会得到以下错误提示:
$ security list-keychain
"/Users/<i>user_account_name</i>/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
大多数人会将所有的密钥/证书等存储在用户账户钥匙串中。正如一些人建议的那样,很容易创建一个与用户钥匙串不同的新钥匙串,并将其保留用于XCode签名。我最终将我的放在这里:/Library/Keychains/sysiphone.keychain。
我认为问题在于我的设置(可能也适用于你的设置),你正在运行在不同的安全性偏好域(系统 vs. 用户)。最后 - 这是我让我的sysiphone.keychain显示出来的方法:
$ sudo security list-keychains -d system -s "/Library/Keychains/sysiphone.keychain"
Password: *****
$ security list-keychains -d system
"/Library/Keychains/sysiphone.keychain"
我开始在Jenkins中构建,神奇的事情发生了。哇...这对我来说浪费了大约4个小时。叹气。