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

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 の質問は、Jenkins サービスのプロパティを設定する方法の良い例です。また、この値は秒単位ではなく分単位であることに注意してください。この回避策はDavidの厚意によるものです。


後者の回避策は私にとってはうまくいきました。ただし、参照レポを使用することを好むことは認めざるを得ませんが、私のようなマルチ構成ジョブで機能するとは思いません。また、すべてのスレーブ ノードにプロパティを設定し、大きな Git リポジトリを使用して、すべてのノードにこれを設定する必要があることを内部的に文書化するのは驚くほど面倒でした。

于 2013-11-15T04:18:21.877 に答える
2

Ubuntu 14.04 lts では

vi または gedit で /etc/default/jenkins edit に移動

以下のようにJava組織を更新します

アップデート前は JAVA_ARGS="-Djava.awt.headless=true" のようになります

以下のように更新します JAVA_ARGS="-Djava.awt.headless=true -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=30"

そしてジェンキンスを再起動します

sudo /etc/init.d/ジェンキンススタート

于 2016-05-10T08:55:10.147 に答える
1

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 に答える