【问题标题】:Hudson + Windows + GitHub + Git Plugin = really really slow fetch stageHudson + Windows + GitHub + Git Plugin = 非常慢的获取阶段
【发布时间】:2011-03-26 12:40:50
【问题描述】:

我正在建立我的第一个 Hudson + Git 项目(以前用 Hudson + SVN 做过很多)。我预计克隆阶段会很慢,因为我们的存储库非常大,但是使用 fetch + merge 的后续构建也一样长。启用了以下选项:

  • 在构建之前合并
  • 结帐后清洁

不是在做“清除工作区”。

... 从远程 Git 存储库获取更改 从 git@github.com:username/ProjectFoo.git 获取上游更改 [Foo] $ git fetch -t git@github.com:username/ProjectFoo.git +refs/heads/*:refs/remotes/origin/*

此时它会停滞很长时间。一旦它最终完成,它似乎会按预期进行:

[Foo] $ git ls-tree HEAD [Foo] $ git rev-parse origin/mybranch 开始构建修订版 c883d59dd5a506a0b586f679a256f539712bfccc (origin/mybranch) 已创建 GitAPI 签出修订版 c883d59dd5a506a0b586f679a256f539712bfccc (origin/mybranch) [Foo] $ git checkout -f c883d59dd5a506a0b586f679a256f539712bfccc [Foo] $ git tag -a -f -m "Hudson Build #2" hudson-Foo-2 记录分支 origin/mybranch 中的更改 [Foo] $ git whatchanged --no-abbrev -M --pretty=raw c883d59dd5a506a0b586f679a256f539712bfccc..c883d59dd5a506a0b586f679a256f539712bfccc 清洁工作区 [Foo] $ git clean -fdx ...

当我从 Git Bash 命令行运行相同的 fetch 命令时,它几乎立即运行。

知道会发生什么吗?还是加快速度的提示?请注意,克隆的存储库为 210MB。 (大约十年的代码历史。)

【问题讨论】:

    标签: windows git hudson github hudson-plugins


    【解决方案1】:

    您能否尝试匿名访问而不是经过身份验证的访问?

    $ git config remote.origin.url git://github.com/username/ProjectFoo.git   # read-only
    $ git config remote.origin.pushurl git@github.com:username/ProjectFoo.git # authenticated
    

    看看在 Hudson 作业中提取是否仍然很慢?

    请参阅插图“Using Github with MsysGit”。

    【讨论】:

    • 鉴于客户端设置 repo 的方式(它是专有的),我们必须以每种方式进行身份验证(AFAIK)。也就是说,我不知道你可以有不同的推/拉 URL。这很酷。我应该澄清一下,如果我从 cmd.exe 环境手动执行,所有这些都可以正常工作......我现在怀疑 Hudson git-plugin,如果我理解正确的话,不是 使用 MsysGit 安装。
    【解决方案2】:

    我也遇到了这个问题,并想出了一个解决方法。当 Hudson 作为服务运行时,您的正常桌面环境缺少某些东西,这导致与网络有关的某些事情必须为每个进程重新加载。 msys-1.0.dll 试图在 netapi32.dll 中加载一些东西,这导致它需要很长时间。所以我刚刚从 PuTTY 下载了 plink.exe,并将我的 GIT_SSH 环境设置为使用它。避免了问题。

    【讨论】:

    • 太棒了!感谢您发布您的解决方案!
    • 我们在两个不同的 Jenkins 服务器上遇到了这个问题,这解决了它。非常感谢!
    【解决方案3】:

    这可能是一个迟到的答案。但是当 Jenkins/Hudson 在我的环境中作为 Windows 服务运行时,它确实解决了极慢的问题。
    关键是让git获取windows服务账户中的rsa密钥!我使它的工作如下:

    1. 打开控制面板->管理工具->服务,找到“Jenkins”。
    2. 右击打开属性->登录,将Jenkins登录指定为具有管理员权限的用户。
    3. 重新启动 Jenkins,“git fetch”就像在 linux 上一样快速运行。

    ccutrer 提供的解决方案在最初的试用版中对我不起作用,因为 plink 无法从选美中获取 rsa 密钥(选美在另一个用户会话中!)。部署我的步骤后,openssh 和 plink 都可以正常工作。

    【讨论】:

    • 如果无法以管理员身份运行 Jenkins,您还可以在兼容性选项卡中将 git.exe 设置为始终以管理员身份运行
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2018-11-14
    • 2020-08-16
    • 1970-01-01
    • 2011-06-13
    • 2017-08-19
    • 2021-02-01
    • 2021-10-14
    相关资源
    最近更新 更多