与Xcode Bots的持续集成

10

我希望使用Xcode机器人进行持续集成。 我已安装OSX Mavericks和Server(版本3)。 我能够使用Xcode 5.0.1创建机器人。 在集成过程中,它成功执行分析测试,但最终集成结果总是失败。

  

集成失败。 意外的内部服务器错误。 有关更多详细信息,请参见集成日志。

我从服务器错误日志中没有理解任何内容。 它由于某些与wiki服务相关的错误而失败。

有人可以帮帮我吗?

Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:233 7e026310 +0ms] didReceiveData
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:246 7e026310 +2ms] connectionDidFinishLoading
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:172 7e026310 +0ms] Out of runloop; request completed
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceProxy.m:79 7e026310 +0ms] Received successful response.
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSConfig.m:55 7e026310 +0ms] Reading plist at /Library/Server/Wiki/Config/collabd.plist
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [XCSBuildHelper.m:97 7e026310 +0ms] Updating bot run with GUID fc16d3af-093e-44aa-8a40-ebfef45bbbd9
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [XCSBuildHelper.m:102 7e026310 +0ms] Updating bot run (fc16d3af-093e-44aa-8a40-ebfef45bbbd9): {
        guid = "fc16d3af-093e-44aa-8a40-ebfef45bbbd9";
        status = failed;
        subStatus = "internal-error";
    }
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSConfig.m:55 7e026310 +0ms] Reading plist at /Library/Server/Wiki/Config/collabd.plist
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSConfig.m:55 7e026310 +0ms] Reading plist at /Library/Server/Wiki/Config/collabd.plist
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSRemoteServiceClient.m:151 7e026310 +0ms] Connecting to https://localhost:4443/svc to execute [https]Request{XCBotService.updateBotRun:({
        guid = "fc16d3af-093e-44aa-8a40-ebfef45bbbd9";
        status = failed;
        subStatus = "internal-error";
    })}
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:159 7e026310 +0ms] Secure, async request
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:169 7e026310 +0ms] Before runloop; request pending
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:223 7e026310 +157ms] didReceiveResponse
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:225 7e026310 +0ms] response=<NSHTTPURLResponse: 0x7fd24a5a7980> { URL: https://localhost:4443/svc } { status code: 200, headers {
        "Accept-Ranges" = bytes;
        "Content-Length" = 3700;
        "Content-Type" = "x-apple/msgpack";
        Date = "Tue, 29 Oct 2013 04:48:41 GMT";
        Status = 200;
        "X-Apple-collabd" = yes;
    } }
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:233 7e026310 +0ms] didReceiveData
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:246 7e026310 +0ms] connectionDidFinishLoading
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:172 7e026310 +0ms] Out of runloop; request completed
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceProxy.m:79 7e026310 +0ms] Received successful response.
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [XCSBuildHelper.m:108 7e026310 +0ms] Updating bot with GUID 4e122aa2-56dd-4e3a-ad6e-25be1a65e657
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [XCSBuildHelper.m:117 7e026310 +0ms] Updating bot with latest bot run GUID key
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [XCSBuildHelper.m:124 7e026310 +0ms] Updating bot (4e122aa2-56dd-4e3a-ad6e-25be1a65e657): {
        guid = "4e122aa2-56dd-4e3a-ad6e-25be1a65e657";
        latestFailedBotRunGUID = "fc16d3af-093e-44aa-8a40-ebfef45bbbd9";
        latestRunStatus = failed;
        latestRunSubStatus = "internal-error";
    }
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSConfig.m:55 7e026310 +0ms] Reading plist at /Library/Server/Wiki/Config/collabd.plist
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSConfig.m:55 7e026310 +0ms] Reading plist at /Library/Server/Wiki/Config/collabd.plist
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Info>: [CSRemoteServiceClient.m:151 7e026310 +0ms] Connecting to https://localhost:4443/svc to execute [https]Request{XCBotService.updateBot:({
        guid = "4e122aa2-56dd-4e3a-ad6e-25be1a65e657";
        latestFailedBotRunGUID = "fc16d3af-093e-44aa-8a40-ebfef45bbbd9";
        latestRunStatus = failed;
        latestRunSubStatus = "internal-error";
    })}
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:159 7e026310 +0ms] Secure, async request
Oct 29 10:18:41 AnilV-InetliMac.local xcsbuildd[11285] <Debug>: [CSRemoteServiceClient.m:169 7e026310 +0ms] Before runloop; request pending

你使用什么类型的代码库?我曾经在使用普通 SVN 代码库时遇到了问题。但是我通过启用 svn+ssh 和公钥身份验证来解决了这个问题。 - gamma
@gamma 我正在使用托管的SVN存储库(需要密码验证)。这是我公司提供的集中式存储库。 - Anil Varghese
是的,我的设置也差不多。唯一的方法就是找出如何让svn+ssh工作。我安装了一个SSHService(Cygwin),为只有在Xcode中运行的用户和我的本地用户创建了一个公钥认证方案。我还没有弄清楚如何使用密码认证。如果您想要,我可以创建一个包含完整描述的答案。 - gamma
当然可以。你能否描述一下建立svn+ssh工作的步骤? - Anil Varghese
3个回答

9
问题似乎在于XCode5 Bots不知道如何使用纯svn。你必须使用svn+ssh。
[更新] 你也可以使用git...与你的SVN同步。工作流程略有不同,但效果很好。
我今天发现了这个:subgit 它完美地集成到GIT和SVN中,你可以在Xcode Server中设置GIT仓库,并通过subgit升级它们-它们将保持同步。(我花了大约半个小时才完全理解它的工作原理)
最重要的是:10个座位许可证(意味着通过subgit的10个协作者)是完全免费的(对我的用例来说足够了)。
[以前的答案] 我提供了一个简单的解决方案,涉及到在SVN服务器机器上安装SSH服务器。我认为这并不重要,但我目前正在使用Cygwin。
在/etc/sshd_config中,你需要添加一个子系统
Subsystem "svnserve -t" /etc/svnserve-proxy
你需要创建文件/etc/svnserve-proxy
cat > /etc/svnserve-proxy
#!/bin/bash
svnserve -t -r <repository>

你需要分别修改svnserve命令和repository。在本地电脑上,你需要修改文件~/.subversion/config并添加一个[tunnels]行。
[tunnels]
ssh = $SVN_SSH ssh -v -l <username> -s

username是您想要进行身份验证的用户名称。 这个解决方案快速而简单,不允许不同的用户进行身份验证。此外,Xcode需要在您的本地机器和Bot-Server上使用相同的用户名。很可能您需要创建一个_teamsuser家目录,并在其中放置一个subversion/config。

另一种选择是使用公钥(如Bot服务器已经创建)。然后,您可以将这些公钥放入authorized_keys中,并在前面放置一个命令:

command="svnserve -t -r <repository> --tunnel-user=<user>" rsa-ssh AAA

我一直在尝试使用公钥进行设置,但无法在Xcode中创建机器人! 我卡在设置存储库/账户的过程中: Xcode-> 首选项-> 账户选项卡 添加存储库 输入svn + ssh地址 输入Subversion 它要求输入用户名和密码,但没有地方输入密钥。 在服务器设置方面,您实际上可以粘贴密钥文本。 当我点击“添加”时,它会显示“验证凭据…”,然后在一个大的弹出窗口中显示ssh服务器横幅。 -更新OMG我删除了横幅,现在正在进行身份验证 - hooby3dfx
更新答案并添加subgit路径的+1。git也有“git svn”可以这样做。https://www.atlassian.com/git/tutorials/migrating-overview - geekay

1
我遇到了类似的问题。在我的情况下,问题出在访问源代码仓库上。OSX服务器存在DNS问题,这导致它无法访问主机。请您检查一下是否能够访问您的源代码仓库?

如何检查?你是怎么解决这个问题的?我的代码仓库开启了代理并需要身份验证。我已经向OSX服务器提供了所需的凭据。我认为它能够访问代码仓库,因为在分析和测试完成后整合阶段才失败。最终结果总是失败。 - Anil Varghese
我明白了。你能把集成日志中显示的内容粘贴一下吗?在左侧选择最近运行后,你会在机器人详细信息页面上找到它。 - Truth

0

通过 Xcode 9,苹果实现了使用 Xcode bots 进行持续集成的便捷。

Xcode Server 内置。持续集成 bots 可以在任何安装了 Xcode 9 的 Mac 上运行,无需安装 macOS Server。

我发现一篇非常好的文章,讲解了如何在 Xcode 9 中进行配置。

Xcode9 - Xcode server comprehensive iOS continuous integration


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接