OS X 3.2.1 CI"待定集成"

时间:2014-09-30 19:15:37

标签: ios continuous-integration osx-server xcode-server

在过去的几天里,我一直致力于让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"在我的开发机器上,我看到了我创建的机器人。

enter image description here

所有内容都已正确设置(包括立即集成复选框),但我的集成位于" pending"州。我检查了system.log,似乎没有发生任何事情。

sidebar main

这可能完全不相关,但每次点击挂起的集成时,我都会在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上找不到任何东西。

5 个答案:

答案 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重置。

https://devforums.apple.com/message/1051403#1051403

答案 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 Server
  • 再次从xcsnginx.keychain钥匙串
  • 导出身份
  • 恢复以前的证书并键入
  • xcsnginx创建新证书和密钥。

让我们来看看每个选项。

选项1

证书和私钥的副本存储在xcsnginx.keychain中的/Library/Developer/XcodeServer/Keychains钥匙串中。此密钥链受存储在XCSNginxKeychainSharedSecret文件夹中名为/Library/Developer/XcodeServer/SharedSecrets的文件中的密码保护。

如果您熟悉OS X钥匙串,则可以从钥匙串中检索证书和钥匙。

然而,使用命令行操纵钥匙串是一个真正的噩梦,所以我会把它作为读者(或编辑)的练习。

选项2

/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

选项3

如果您无法恢复以前的证书和钥匙串,您可能决定只生成新的证书和钥匙串:

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。取消机器人运行会使其处于奇怪的状态。

在我删除了一堆集成后,我重新启动了服务器正在运行的机器,我的集成再次开始工作!

希望能有所帮助。