在过去的几天里,我一直致力于让CI使用外部mac mini运行OS X Server。但是,我在OS X Server 3.2.1和XCode 6.1b3上遇到了很多问题。
看起来Apple修复了Xcode 6.1b3中的一个问题,该问题没有将正确的配置文件放入Portal.keychain。但是,我的集成现在还没有运行。
运行干净的OS X版本后,XCode服务器无法集成。我成功连接到服务器并创建了一个机器人。如果我访问" SERVER.local"在我的开发机器上,我看到了我创建的机器人。
所有内容都已正确设置(包括立即集成复选框),但我的集成位于" pending"州。我检查了system.log,似乎没有发生任何事情。
这可能完全不相关,但每次点击挂起的集成时,我都会在system.log中收到此错误:
NSFileCoordinator only handles URLs that use the file: scheme. This one does not:
x-code-xcsbot://XXX
我不确定这是否是OS X服务器3.2.1中引入的新问题,或者它是否只是一个设置问题。显然没有其他人有这个问题,在Google / SO上找不到任何东西。
答案 0 :(得分:16)
这仍然在发生,但是如果您只是想轻推服务器以唤醒并运行并且不准备删除您的x-code服务器配置(provisioningProfiles,凭据和机器人被删除(我记得)),只需运行此终端命令
sudo -u _xcsbuildd /Applications/Xcode.app/Contents/Developer/usr/bin/xcsbuildd
请注意,如果您在“应用程序”文件夹中有多个Xcode版本,则可能会对它们进行不同的命名,因此命令可能略有不同。就我而言,我有一个名为'Xcode 6.1.1'的文件。所以命令就是
sudo -u _xcsbuildd /Applications/Xcode\ 6.1.1.app/Contents/Developer/usr/bin/xcsbuildd
答案 1 :(得分:14)
在OS X Server中运行XCode beta版本时,似乎会发生这种情况。
请注意,此命令将❗️删除所有bots❗️
运行sudo xcrun xcscontrol --reset
重置。
答案 2 :(得分:6)
这是一个可以解决问题而无需重置Xcode Server的解决方案。
首先,通过检查xcsnginx.log
日志文件来检查此答案是否适用:
sudo tail /Library/Developer/XcodeServer/Logs/xcsnginx.log
在日志末尾搜索以下行:
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/Library/Developer/XcodeServer/Certificates/xcsnginx.key") failed (SSL: error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
我没有看到日志中的条目,我担心这个答案对你没有帮助。如果您确实看到该条目,则可以继续。
Xcode Server在内部运行名为20543
的Nginx Web服务器(在端口xcsnginx
上),该服务器充当某些服务之间的代理。此服务器使用TLS / SSL证书确保通信安全。涉及的文件如下:
xcsnginx.crt
:包含PEM证书。xcsnginx.key
:包含证书的私钥。xcsnginx.pass
:包含私钥的密码。据我所知,私钥是以未加密的方式存储的,这意味着xcsnginx.pass
应为空(并且每次Xcode Server启动时都会重置)。
但是出于某种原因,某些人认为xcsnginx.key
中的私钥是作为加密密钥导出的。我不知道如何以及为什么会发生这种情况,但它确实发生在我的服务器上,所以我认为它也可能发生在你的服务器上。结果是xcsnginx
无法加载证书而无法启动。
您可以执行以下命令验证xcsnginx
未运行:
pgrep xcsnginx || echo "Not running"
我们可以:
,而不是从头开始重置Xcode Serverxcsnginx.keychain
钥匙串或 xcsnginx
创建新证书和密钥。让我们来看看每个选项。
证书和私钥的副本存储在xcsnginx.keychain
中的/Library/Developer/XcodeServer/Keychains
钥匙串中。此密钥链受存储在XCSNginxKeychainSharedSecret
文件夹中名为/Library/Developer/XcodeServer/SharedSecrets
的文件中的密码保护。
如果您熟悉OS X钥匙串,则可以从钥匙串中检索证书和钥匙。
然而,使用命令行操纵钥匙串是一个真正的噩梦,所以我会把它作为读者(或编辑)的练习。
/Library/Developer/XcodeServer/Certificates
文件夹可能包含证书和密钥的备份。我们来看看:
sudo find /Library/Developer/XcodeServer/Certificates -name "*.original"
如果你很幸运,你应该得到以下结果:
/Library/Developer/XcodeServer/Certificates/xcsnginx.crt.original
/Library/Developer/XcodeServer/Certificates/xcsnginx.key.original
/Library/Developer/XcodeServer/Certificates/xcsnginx.pass.original
这意味着您可以恢复原始文件:
sudo cp /Library/Developer/XcodeServer/Certificates/xcsnginx.crt.original /Library/Developer/XcodeServer/Certificates/xcsnginx.crt
sudo cp /Library/Developer/XcodeServer/Certificates/xcsnginx.key.original /Library/Developer/XcodeServer/Certificates/xcsnginx.key
sudo cp /Library/Developer/XcodeServer/Certificates/xcsnginx.pass.original /Library/Developer/XcodeServer/Certificates/xcsnginx.pass
如果您无法恢复以前的证书和钥匙串,您可能决定只生成新的证书和钥匙串:
sudo openssl req -new -x509 -newkey rsa:2048 -nodes -out /Library/Developer/XcodeServer/Certificates/xcsnginx.crt -keyout /Library/Developer/XcodeServer/Certificates/xcsnginx.key -subj /CN=your-server.example.com -days 1000 -batch
其中your-server.example.com
替换为服务器的DNS地址。理想情况下,证书应由Xcode服务器根证书颁发机构颁发,但使用单签名证书似乎不是问题(就我现在/目前/您的里程可能会有所不同而言)。
现在我们必须等到系统再次启动xcsnginx
。这应该在一分钟或更短的时间后自动发生。您可以验证xcsnginx
确实以:
pgrep xcsnginx || echo "Not running"
答案 3 :(得分:4)
您可以使用restart而不是从命令行重置来重新启动服务器。这将终止你正在运行的已冻结的机器人。
sudo xcrun xcscontrol --restart
答案 4 :(得分:2)
我已经碰到过好几次了。我完成了xcrun xcscontrol --reset
它确实有效,但我已经厌倦了。由于我的机器人使用前/后集成触发器变得更加复杂,我不想再次设置它们。
这次对我有用的只是通过所有最近的集成和deleting any canceled ones
。取消机器人运行会使其处于奇怪的状态。
在我删除了一堆集成后,我重新启动了服务器正在运行的机器,我的集成再次开始工作!
希望能有所帮助。