詹金斯在10分钟内从Github取出时超时。

时间:2013-11-13 13:11:31

标签: jenkins maven-2

我在为Nightly build构建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

7 个答案:

答案 0 :(得分:27)

我正准备使用Workaround#2,但它看起来像git插件2.0.3现在可以在UI中配置,虽然它有点隐藏并且是每个项目。

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

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

答案 1 :(得分:18)

看起来这是一个已知问题。请参阅JENKINS-20445JENKINS-20387以及其他几个似乎突然爆发的问题。

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


解决方法#1 - 创建一个本地裸参考克隆以减少时间,如here所述。

  

如果从Jenkins到git存储库只有30 kb / s的吞吐量,你应该考虑克隆一个裸的副本   存储库到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机器上提供裸克隆之后,添加它   对工作的高级行为,它应该表现得更好。


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

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

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


后一种解决方法对我有用。虽然,我必须承认我更喜欢使用引用仓库,但我不相信它适用于多配置工作,例如我的工作。并且,预先警告为每个从节点设置属性然后在内部记录我们必须在所有节点上使用大型Git repos进行设置,这是非常痛苦的。

答案 2 :(得分: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密钥没有密码!詹金斯   克隆存储库时似乎会挂起,但实际上它是ssh   在后台阻止等待您输入密码。

http://computercamp-cdwilson-us.tumblr.com/post/48589650930/jenkins-git-clone-via-ssh-on-windows-7-x64

中的详细步骤

答案 3 :(得分:4)

我刚刚找到了jenkins timout#10 min错误的解决方案。这个错误是由于互联网连接不足或可能是你在github中的项目大小很大,所以jenkins无法从git服务器加载该项目。为了解决我们必须编辑的问题"附加行为"在Jen中的jenkins项目配置和增加"克隆和获取操作的超时(以分钟为单位)"到" 60"或" 120"分钟。所以现在只要jenkins从git服务器克隆git项目,就有足够的时间从git服务器加载/克隆项目。

答案 4 :(得分:2)

在Ubuntu 14.04 lts

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

更新下面的java orgs

在更新之前,它会像 JAVA_ARGS = “ - Djava.awt.headless =真”

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

并重新启动jenkins,如

sudo /etc/init.d/jenkins start

答案 5 :(得分:1)

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

在Windows上:

  1. 转到C:\Program Files (x86)\Jenkins
  2. 打开jenkins.xml档案
  3. -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60代码
  4. 中添加<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>
    

答案 6 :(得分: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"