OS X Server - 机器人无法从存储库获取源代码

Posted

技术标签:

【中文标题】OS X Server - 机器人无法从存储库获取源代码【英文标题】:OS X Server - bot can't get source from repository 【发布时间】:2014-09-30 16:36:23 【问题描述】:

我有一个以前版本的 OS X Server 设置并运行良好,但是当我安装升级到 3.2.1 时,我发现我的机器人都不能正常工作。这些是我在每次尝试集成时遇到的问题:

构建服务错误无法将数据放入缓冲区 (-1)。

构建服务警告源代码管理操作失败,因为找不到工作副本。

构建服务警告更新现有结帐时出错。退回到干净的结帐..

我可能找错地方了,但我认为这些错误意味着我无法连接到我的 Git 存储库。当我从 Xcode 中删除我的存储库并再次运行机器人并得到相同的错误时,这一点得到了部分证实。 (我已经在 Xcode 中重新添加了存储库并执行了 Check Out 来测试它,所以我很确定我所有的连接细节都是正确的。)

对于以前版本的 OS X Server,我确定我已经直接从服务器连接到存储库,如 Help > Server Tutorials > Automate Xcode builds 中所述:

第 3 步。授予 Xcode 服务对 git 存储库的访问权限

Xcode 服务机器人从您的源 git 存储库访问项目和代码。

单击存储库,然后单击添加按钮 (+)。从 New Repository 弹出菜单中选择 Connect to a Git Repository。

但在最新版本中,当您单击“添加”按钮时,您只会获得创建新存储库的选项,而不是连接到现有存储库。网络上的说明(现在)说:

连接到远程存储库

如果您在远程服务器上的 Git 或 Subversion 存储库中有项目,您可以将您的凭据存储在您的开发 Mac 上 Xcode 的 Accounts 首选项中。然后,当您需要访问存储库时,您不必每次都重新输入您的凭据。

将远程存储库的凭据添加到开发 Mac

要让 Xcode Server 对您的项目执行集成,它还必须能够访问其源代码存储库。配置 Xcode Server 以连接到您的远程存储库。

在您的开发 Mac 上选择 Xcode > 首选项。

单击工具栏中的帐户。

单击添加按钮 (+),然后选择添加存储库。

在文本字段中,输入存储库的 URL(例如,svn+ssh://svn.example.com/ProjectName 或 https://example.com/git/repository.git),然后单击“下一步”按钮。

在“帐户”首选项的“存储库”窗格中输入您的用户名和密码。

这有点含糊,但似乎表明现在 OS X Server 使用在 Xcode 首选项中设置的存储库。

无论如何,现在我的 OS X Server 似乎无法访问存储库。我在这里遗漏了什么吗?

谢谢

更新:

在假装它不存在一个月后,我又回到了这个问题,并得出了以下发现:

-OS X Server 3.2.1、OS X Server 3.2.2 和 OS X Server 4.0 在两台不同的机器上出现问题。

-当存储库位于运行 Gitblit 的服务器上时会出现问题,但不适用于远程 Bitbucket 存储库或托管在本地 OS X 服务器中的 Git 存储库。

-该问题仅发生在较大的存储库中。

【问题讨论】:

很遗憾,我无能为力,只能说我认为您没有遗漏什么。我不能再将 Xcode 服务器指向外部 SVN 或 GIT 存储库。我真的希望这是一个错误,而不是新的实现,因为它已经为我削弱了这个 CI 系统! 我刚刚更新到 OS X Yosemite 和 OS X Server 4,但我仍然遇到同样的问题!现在还有一个 3.2.2 OS X Server 升级,您只能在升级到 Yosemite 之前安装它,所以看看它是否能解决任何人的问题会很有趣。 嗨若昂。我做到了 - 请参阅下面接受的答案。谢谢 @jimmyjudas。我们的 repo 使用 bitbucket。但我们看到了类似的问题。 【参考方案1】:

我以最复杂的方式解决了这个问题!

当 OS X Server 连接到存储库以下载源代码时,它使用 Xcode 库。 Xcode 使用libgit2 进行下载,其中a known bug 导致缓冲区错误。它已在 v0.21.2 中修复,但最新的 Xcode (6.1.1) 仅使用 v0.21。之前的 Xcode 版本仅使用 v0.20,因此希望未来的 Xcode 版本将使用 v0.21.2+,在这种情况下,此修复不应该是必要的。

无论如何,Xcode 6.1.1 的解决方案是:

    从这里下载并解压 Xcode 使用的 gitlib 版本:https://github.com/libgit2/libgit2/releases/tag/v0.21.0 对 src/transports/http.c 进行更改,详见此处:https://github.com/libgit2/libgit2/commit/7d729d0bfd897e8685099b160b6dbfd7f4ebd588 保存 http.c 文件

    使用 the instructions here 构建您编辑的 gitlib2 版本,即:

    下载CMake

    导航到解压后的 libgit2-0.21.0 文件夹后,在终端中运行以下命令:

    $ mkdir build && cd build

    $ cmake ..

    $ cmake --build .

    服务器上的 Finder 中,转到 Applications 文件夹,右键单击 Xcode 并选择“显示包内容”。转到 Contents/Developer/usr/lib 文件夹并将“libgit2.dylib”文件重命名为“libgit2.dylibold”或类似名称。

    从 libgit2-0.21.0/build 文件夹中取出新创建的 'libgit2.0.21.0.dylib' 文件,将其重命名为 'libgit2.dylib' 并将其复制到 /Applications/Xcode/Contents /Developer/usr/lib 文件夹在您的服务器上。

    重新启动 OS X Server,并从 Xcode 再次集成您的机器人。

【讨论】:

虽然修补 Xcode 的一个 dylib 很有趣,但这并没有为我解决问题。它不会让我在创建机器人时通过存储库凭据屏幕,说“此传输未实现。抱歉(-1)”,我猜这是一些 libgit2 错误。哦,好吧。 嗨,特拉维斯。很抱歉听到它没有为您解决问题。不过,听起来你对我有不同的问题。 这确实解决了我的问题,但需要注意的是,这只是基于jgit构建的git服务器的解决方案。 很高兴听到@bolnad。我假设只有 jgit 服务器会导致这个确切的错误。 @TravisB,你明白了吗?我看到了同样的错误:这个传输没有实现。抱歉 (-1)。【参考方案2】:

远程存储库将在您创建机器人时添加。您不必在 OSX 服务器中添加存储库。

【讨论】:

是的,谢谢。但问题是我的机器人在集成时似乎无法访问存储库。 我也有类似的问题。我可以在 XCode 中添加存储库(Git 存储库,托管在 TFS 服务器上,通过 https 访问),但是当我 Product->Create Bot 验证失败时:develop: Unexpected HTTP status code: 404 (-1) 即使我可以使用 XCode 的源代码管理来检查代码。 :| 我 3!我遇到了完全相同的问题! 尝试通过 ssh 而不是 https 进行身份验证。

以上是关于OS X Server - 机器人无法从存储库获取源代码的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 无法添加 Mac OS X 服务器

无法获取索引库URL https://pypi.python.org/simple/〜安装Python 3 OS X之后

未加载库:尝试使用 mysql2 gem 在 OS X 10.6 上运行“rails server”时出现 libmysqlclient.16.dylib 错误

Parse-Server - 无法从远程机器上的数据库中获取数据

在 OS X 上安装 Qt 库

OS X 服务器机器人的档案存储在哪里