14

在过去的几天里,我一直致力于让 CI 与运行 OS X Server 的外部 mac mini 一起工作。但是,我在使用 OS X Server 3.2.1 和 XCode 6.1b3 时遇到了很多问题。

看起来 Apple 修复了 Xcode 6.1b3 中的一个问题,该问题没有将正确的配置文件放入 Portal.keychain 中。但是,我的集成现在甚至没有运行。

运行干净的 OS X 构建后,XCode 服务器不会集成。我成功连接到服务器并创建了一个机器人。如果我在我的开发机器上访问“SERVER.local”,我会看到我创建的机器人。

在此处输入图像描述

一切都已正确设置(包括立即集成复选框),但是我的集成处于“待定”状态。我检查了 system.log,但似乎没有发生任何事情。

侧边栏主要的

这可能完全不相关,但是每次我单击待处理的集成时,我都会在 system.log 中收到此错误:

NSFileCoordinator only handles URLs that use the file: scheme. This one does not:
x-code-xcsbot://XXX

我不确定这是否是 OS X server 3.2.1 中引入的一个新问题,或者这只是一个设置问题。显然没有其他人遇到过这个问题,在 Google/SO 上找不到任何东西。

4

5 回答 5

16

这种情况仍在发生,但如果您只是想推动服务器唤醒并运行并且不准备删除您的 x-code 服务器配置(provisioningProfiles、凭据和机器人被删除(我记得)),只需运行这个终端命令

sudo -u _xcsbuildd /Applications/Xcode.app/Contents/Developer/usr/bin/xcsbuildd

请注意,如果您的 Applications 文件夹中有多个版本的 Xcode,您可能对它们进行了不同的命名,因此命令可能会略有不同。就我而言,我有一个名为“Xcode 6.1.1”的文件。所以命令是

sudo -u _xcsbuildd /Applications/Xcode\ 6.1.1.app/Contents/Developer/usr/bin/xcsbuildd
于 2015-05-12T15:56:53.200 回答
15

在 OS X Server 中运行 XCode beta 版本时似乎会发生这种情况。

请注意,此命令将❗️删除所有机器人❗️
运行sudo xcrun xcscontrol --reset以重置。

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

于 2014-10-06T21:45:17.083 回答
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 在内部运行一个 Nginx Web 服务器(在 port 上20543),命名为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

whereyour-server.example.com替换为您的服务器的 DNS 地址。理想情况下,证书应该由 Xcode 服务器根证书颁发机构颁发,但使用单签名证书似乎不是问题(就我现在/目前/您的里程可能会有所不同)。

最后

现在我们只需要等到系统xcsnginx再次启动。这应该在一分钟或更短的时间内自动发生。您可以验证xcsnginx确实开始于:

pgrep xcsnginx || echo "Not running"
于 2016-04-18T18:13:51.937 回答
5

您可以从命令行使用 restart 而不是 reset 来重新启动服务器。这将终止您正在运行的已冻结的机器人。

sudo xcrun xcscontrol --restart
于 2015-11-06T20:17:44.533 回答
2

我遇到过几次。我已经完成xcrun xcscontrol --reset并且它确实有效,但我已经厌倦了。随着我的机器人在前/后集成触发器变得更加复杂,我不想再次设置它们。

这次对我有用的只是经历了所有最近的集成和deleting any canceled ones. 取消机器人运行可能会使其处于奇怪状态。

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

希望对某人有所帮助。

于 2015-09-09T16:25:04.867 回答