2012-03-27 73 views
1

我从jenkins slave构建我的iOS项目并获得一些奇怪的结果。如果我尝试从jenkins的命令行构建我的项目,那就没有问题了。但詹金斯一直告诉我,身份证在钥匙链中不止一次出现。身份不重复,我查了很多次。使用jenkins作为mac osx slave通过StartupItem启动钥匙串列表中摆脱重复系统钥匙串

启动詹金斯从我的用户(使用sudo -u,PS显示正确的用户)从StartupItem。签名证书,其私钥和WWDR中间证书被部署到系统钥匙串中,因为我无法从StartupItem访问登录钥匙串启动jenkins。

通过SO和谷歌,我发现,这可能与挖掘的东西一点点后,指出这样一个问题:

Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development

我已经为了设置一个命令行步打印该列表钥匙扣输出和我得到相同的:

+ security list-keychains 
    "/Library/Keychains/System.keychain" 
    "/Library/Keychains/applepushserviced.keychain" 
    "/Library/Keychains/System.keychain" 

但它不是为我工作,xcodebuild联编口口声声说“证明身份‘XXXXXX’出现了在钥匙串再次”,似乎是相关的因为我有Syst em.keychain重复在钥匙串列表中。

我不能找到一种方法,只留下一个System.keychain进入名单,我想:

  • 使用安全列表钥匙扣执行第一脚本-s以更改列表W/O运气
  • 清洁所有的证书和密钥,并重新开始
  • 重置钥匙串
  • 创建一个专用的用户对詹金斯服务试图避免从以前的用户的任何混乱,但似乎更多的东西全系统的相关
  • 重置LS数据库

任何人的线索?

我试着对前面提到的问题留言,但我是新手,我不能这样做,回答似乎不礼貌,因为我需要问一些问题,我没有给出答案。所以任何通过这个问题的答案将不胜感激。提前致谢!


环境:

  • OSX狮子10.7.3
  • 的Xcode 4.3
  • Xcode的命令行工具版本2.00更新
  • 詹金斯。 1.456和最新的插件。

回答

2

目前,它不能使用StartupItem来完成...我终于使用基于来自链接SO的答案的LaunchDaemon管理问题。这是我使用的LaunchDaemon:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
     "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>GroupName</key> 
     <string>wheel</string> 
     <key>KeepAlive</key> 
     <true/> 
     <key>Label</key> 
     <string>org.jenkins-ci</string> 
     <key>ProgramArguments</key> 
     <array> 
       <string>/usr/bin/java</string> 
       <string>-jar</string> 
       <string>/Users/jenkins/work/slave.jar</string> 
       <string>-noCertificateCheck</string> 
       <string>-jnlpUrl</string> 
       <string>https://MySERVER/jenkins/computer/MacOSX/slave-agent.jnlp</string> 
     </array> 
     <key>RunAtLoad</key> 
     <true/> 
     <key>UserName</key> 
     <string>jenkins</string> 
     <key>SessionCreate</key> 
     <true/> 
</dict> 
</plist> 
1

因此,当我从launchctl运行Jenkins作为LaunchDaemon时,我看到钥匙串列表。无论我告诉launchctl在启动时使用哪个用户,我总是只能看到那些钥匙串。

要改变这种行为,我从启动plist启动了Jenkins作为LaunchAgent。在这个实例中使用Jenkins列出钥匙串显示用户登录钥匙串和系统钥匙串,而不是稍微奇怪的“System,applepushsericed,System”列表。

+0

是的,我没有与StartupItem的运气,但我终于找到了一种方法来解决问题,从链接SO使用LaunchDaemon。我想我必须回答这个问题才能完成。添加“SessionCreate”属性解决了我的问题,我不需要登录,在启动时工作。 – 2012-04-12 09:00:14

0

这也可以通过从用户列表中打开钥匙串访问,编辑,钥匙串列表和移除系统钥匙串固定。它仍然可以从System中获得。