Repo sync/Git 克隆仅从詹金斯的奴隶失败

Repo sync/Git clone is failed only from jenkins's slave

我从 jenkins slave 执行 repo sync

但是特定的 repogitory 发生了错误。

Cloning into 'repo_name'...
Connection to xxx.xxx.xxx.xxx closed by remote host.
fatal: The remote end hung up unexpectedly

当我手动执行时(不是从 jenkins 执行),回购同步成功。 以上错误仅在jenkins的slave执行时出现。

我也尝试下cmd。但它失败了同样的错误。

git clone ssh://user@xxx.xxx.xxx.xxx:port/path/to/reponame

我尝试git config --global http.postBuffer 524288000参考以下内容。 但不是固定的....

The remote end hung up unexpectedly while git cloning

我添加--progress--verbose进行调查

git clone --progress --verbose ssh://user@xxx.xxx.xxx.xxx:port/path/to/reponame

git克隆成功!!

为什么从詹金斯的奴隶那里失败了。 为什么添加成功了--progress --verbose.

我可以在没有 --progress 的情况下修复它吗? (从 jenkins 执行时,回购同步似乎没有 --progress。)

抱歉我的英语不好。

这是一个常见问题,可能有不同的原因。 有时是由于您的从属机器的低数据速度。

参考这个,

https://confluence.atlassian.com/bitbucketserverkb/git-clone-fails-fatal-the-remote-end-hung-up-unexpectedly-fatal-early-eof-fatal-index-pack-failed-779171803.html

谢谢

根据以下

https://issues.jenkins-ci.org/browse/JENKINS-9168

When cloning a large repository over HTTP, the git server goes quiet for quite some time, busy computing a pack file. Normally, Apache is configured such that a prolonged inactivity in a socket will trigger a shutdown. So what the end user sees is that after a while, "git clone" fails by the unexpected connection reset by the server.

但是,我无法配置服务器,因为服务器是 public 服务器。 所以,

If the user tries the same command from the shell, Git silently adds the --progress option (see the quote from the man page.) This keeps the socket chatty enough to avoid a shutdown from Apache.

另一方面,repo 无法添加 --progress 选项。 我别无选择,所以我 mod 回购脚本。 (.repo/repo/git_command.py)