24

在为 Nightly 构建配置 Jenkins 时,我遇到了这个问题。请注意,存储库项目“project1”很大,大约 900MB。请让我知道我应该如何解决这个问题。

Started by user anonymous
Building in workspace C:\Users\user1\.jenkins\jobs\Nightly Build\workspace
Fetching changes from the remote Git repository
Fetching upstream changes from git@github.com:MyOrg/projectgroup/project1
ERROR: Timeout after 10 minutes
FATAL: Failed to fetch from git@github.com:MyOrg/projectgroup/project1
hudson.plugins.git.GitException: Failed to fetch from git@github.com:MyOrg/projectgroup/project1
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:612)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:836)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:861)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1412)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:652)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:557)
    at hudson.model.Run.execute(Run.java:1679)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:509)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:230)
Caused by: hudson.plugins.git.GitException: Command "fetch -t git@github.com:MyOrg/projectgroup/project1 +refs/heads/*:refs/remotes/origin/*" returned status code -1:
stdout: 
stderr: 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:981)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:920)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.fetch(CliGitAPIImpl.java:187)
    at hudson.plugins.git.GitAPI.fetch(GitAPI.java:229)
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:610)
    ... 10 more
4

7 回答 7

28

我正要使用 Workaround #2,但似乎从 git plugin 2.0.3 开始,现在可以在 UI 中进行配置,尽管它有点隐藏并且是每个项目的。

转到项目的配置屏幕、源代码管理部分、Git、附加行为、添加、高级克隆行为、克隆和获取操作的超时(以分钟为单位)。

如果您想要全局设置,我将使用 DevHopeful_2012 建议的解决方法 #2。

于 2014-02-24T13:12:27.777 回答
18

看起来这是一个已知问题。请参阅JENKINS-20445JENKINS-20387和其他几个问题,这些问题似乎正在出现。

根据这些错误报告,这只发生在较新版本的 Git 插件中,因此您可以降级或尝试一些解决方法:


解决方法 #1 - 创建本地裸引用克隆以减少时间,如此所述。

如果从 Jenkins 到 git 存储库的吞吐量只有 30 kb/秒,您可能应该考虑将存储库的裸副本克隆到 Jenkins 服务器上的中央位置,然后使用“高级克隆行为”执行克隆以使用参考存储库。这将显着减少从 git 服务器传输到 Jenkins 的数据量。

在我的 Debian Jenkins 机器上,我这样做:

$ sudo mkdir -p /var/cache/git/mwaite
$ sudo chown mwaite.mwaite /var/cache/git/mwaite
$ cd /var/cache/git/mwaite
$ git clone --bare https://github.com/jenkinsci/jenkins.git

在 Jenkins 机器上可用该裸克隆后,将高级行为添加到作业中,它应该会执行得更好。


Git.timeOut解决方法 #2 - 使用以下属性增加超时以允许完成较长的初始克隆过程:

java -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60 -jar jenkins.war

这个 SO question是如何为 Jenkins 服务设置属性的一个很好的例子。另请注意,此值以分钟为单位,而不是秒。此解决方法由David提供。


后一种解决方法对我有用。虽然,我必须承认我更喜欢使用参考存储库,但我不相信它适用于像我这样的多配置工作。并且,请注意,为每个从节点设置一个属性,然后在内部记录我们必须在所有节点上设置它,使用大型 Git 存储库,这是非常痛苦的。

于 2013-11-15T04:18:21.877 回答
12

仅限 Windows

您的 ssh 连接可能未正确配置。如果未建立与您的 git 存储库的 ssh 连接,Jenkins 构建可能会显示为挂起并最终超时。

默认情况下,Jenkins 安装程序将 Jenkins 设置为作为服务运行,该服务作为“本地系统帐户”运行,而不是您的用户帐户。由于“本地系统帐户”没有设置 SSH 密钥或 known_hosts,“git clone”将失败。

您可以将 C:\Program Files (x86)\Git\.ssh 复制到 C:\Windows\SysWOW64\config\systemprofile\.ssh (“本地系统帐户”主页)

还,

重要提示:确保您的 ssh 密钥没有密码!Jenkins 在克隆存储库时会出现挂起,但实际上它是在后台阻塞 ssh 等待您输入密码。

http://computercamp-cdwilson-us.tumblr.com/post/48589650930/jenkins-git-clone-via-ssh-on-windows-7-x64中的详细步骤

于 2014-03-03T06:33:12.417 回答
4

我刚刚找到了 jenkins timout #10 min 错误的解决方案。出现此错误是因为 Internet 连接不足,或者可能是您在 github 中的项目大小很大,因此 jenkins 无法从 git 服务器加载该项目。为了解决问题,我们必须在 jenkins 项目中编辑 Git 中的“其他行为”配置并将“克隆和获取操作的超时(以分钟为单位)”增加到“60”或“120”分钟。因此,现在每当 jenkins 从 git 服务器克隆 git 项目时,就有足够的时间从 git 服务器加载/克隆项目。

于 2015-03-25T08:08:51.980 回答
2

在 Ubuntu 14.04 中

使用 vi 或 gedit 转到 /etc/default/jenkins 编辑

像下面这样更新java orgs

在更新之前,它会像 JAVA_ARGS="-Djava.awt.headless=true"

如下更新 JAVA_ARGS="-Djava.awt.headless=true -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=30"

并重新启动詹金斯

sudo /etc/init.d/jenkins start

于 2016-05-10T08:55:10.147 回答
1

解决方法 #2 对我有用,我不得不更改 jenkins.xml 文件。

在 Windows 上:

  1. C:\Program Files (x86)\Jenkins
  2. 打开jenkins.xml文件
  3. 添加-Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60内部<arguments>标签

这就是我的配置的样子

前:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

后:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60 -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
于 2016-05-10T08:48:40.377 回答
0

在带有 Jenkins-2.138 的 CentOS/RedHat 7.4 Linux 上

编辑,用其他人在他们的答案中提到的超时设置/etc/sysconfig/jenkins修改(最后一行):JENKINS_ARGS

# Pass arbitrary arguments to Jenkins.
# Full option list: java -jar jenkins.war --help
#
JENKINS_ARGS="-Dorg.jenkinsci.plugins.gitclient.Git.timeOut=25"
于 2018-12-12T22:43:08.193 回答