Dmy*_*tro 41 hudson keychain launchd ios jenkins
我正在尝试改进iOS的Hudson CI,并在系统启动后立即启动Hudson.为此,我使用以下launchd脚本:
<?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>Hudson CI</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-jar</string>
<string>/Users/user/Hudson/hudson.war</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>user</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当由Hudson启动的xcodebuild尝试签署应用程序时,它失败了,因为它无法在钥匙串中找到正确的密钥/证书.但是密钥/证书对是存在的,因为如果我从命令行启动Hudson它正常工作.
你知道为什么会这样吗?
joe*_*son 71
我找到了一个解决方案,让我可以访问Jenkins用户的常规钥匙串.
除了在接受的答案建议中指定plist中的UserName元素之外,访问您在UserName中指定的用户的普通键链的技巧是还将一个值为true的SessionCreate元素添加到plist文件中 - /Library/LaunchDaemons/org.jenkins-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>EnvironmentVariables</key>
<dict>
<key>JENKINS_HOME</key>
<string>/Users/Shared/Jenkins/Home</string>
</dict>
<key>GroupName</key>
<string>wheel</string>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.jenkins-ci</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Library/Application Support/Jenkins/jenkins-runner.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>jenkins</string>
<key>SessionCreate</key>
<true />
</dict>
Run Code Online (Sandbox Code Playgroud)
然后重新启动守护程序并尝试在Jenkins中运行调用安全列表 - 密钥链的作业 - 您不应再将System.keychain视为唯一的条目,而是常规登录和您可能已添加到密钥链列表中的任何自定义密钥链"jenkins"用户.
我现在正在使用Jenkins构建服务器上的自定义密钥链中的代码签名证书 - 我没有在我的系统密钥链中安装任何证书或密钥.
Jen*_*ohl 20
在花了几个小时和几天这个问题后,我找到了一个相当简单的解决方案.如上所述,如果您的launchd配置中有不同的用户名,则无关紧要:
<key>UserName</key>
<string>user</string>
Run Code Online (Sandbox Code Playgroud)
丢失的证书和密钥必须在系统密钥链(/Library/Keychains/System.keychain
)上.我在设置了一个执行多个security
shell调用的jenkins作业后发现了这个.有趣的是security list-keychains
:
+ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/applepushserviced.keychain"
"/Library/Keychains/System.keychain"
Run Code Online (Sandbox Code Playgroud)
这是钥匙链jenkins将搜索证书和密钥,因此他们应该在那里.我将证书移到那里后就可以了.确保您还将"Apple Worldwide Developer Relations Certification Authority"证书复制到系统密钥链,否则您将看到CSSMERR_TP_NOT_TRUSTED
错误codesign
.
也可以注册更多的钥匙串security list-keychains -s [path to additional keychains]
.我没有尝试过,但像security list-keychains -s $HOME/Library/Keychains/login.keychain
jenkins中的预构建shell执行一样可能会起作用.
编辑:我试图将用户钥匙串添加到搜索路径,-s
但我无法让它工作.所以现在,我们必须将我们的证书和密钥复制到系统密钥链中.
编辑^ 2:阅读并使用joensson的解决方案而不是我的,他设法访问用户的钥匙串而不仅仅是系统钥匙串.
我们在 Mac OSX Lion 上作为启动守护进程启动的 hudson 从机也遇到了同样的问题。当我们使用 webstart 启动从站时,它起作用了。我们发现的唯一区别是环境变量不同。
com.apple.java.jvmTask=WebStart
Run Code Online (Sandbox Code Playgroud)
有效,如果我们在没有 webstart 的情况下启动从站,则变量为
com.apple.java.jvmTask=CommandLine.java
Run Code Online (Sandbox Code Playgroud)
我们找不到预先影响价值的方法。我建议您在 Hudson 中创建一个新节点,在同一台计算机上运行并由 webstart 启动。为了启动从站,我们使用以下 launchdaemon 配置:
<?xml version"1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>jenkins</string>
<key>UserName</key>
<string>apple</string>
<key>Program</key>
<string>/usr/bin/javaws</string>
<key>ProgramArguments</key>
<array>
<string>-verbose</string>
<string>-wait</string>
<string>http://<hudson-hostname>:8080/computer/<node-name>/slave-agent.jnlp</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>WorkingDirectory</key>
<string>/Users/apple</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24710 次 |
最近记录: |