質問: とある(サイズがかなり大きい)リポジトリを含んだプロジェクトに対して"Jenkins上から"repo syncを実行したところ以下のエラーが発生し失敗してしまいます。 ``` Cloning into 'repo_name'... Connection to xxx.xxx.xxx.xxx closed by remote host. fatal: The remote end hung up unexpectedly ``` jenkinsからの実行ではなく、同じマシンのプロンプト上から実行した場合は問題なく成功いたします。 また、このリポジトリ以外(サイズ小さめ)はjenkins上からの実行でも成功しています。 このリポジトリに対して同様にJenkins上からgit cloneをかけても同様エラーで失敗します。 以下などを参考にバッファサイズを変更したりしてみましたが、現象変わらずでRPCやnginxのエラーメッセージは表示されておりません。 しかしながら 調査の為にgit cloneに--progressオプションを付与してみたところ何故かjenkinsからの取得でも成功してしまいました。 repo syncコマンドを解析してみたところ、非TTY状況であるとrepo sync内部で実行しているgit fetchに--progressを付与しないようにしているようのでこの点からも辻褄があいそうです。 質問内容といたしましては ・何故非TTY環境だとサイズの大きいリポジトリ時に失敗してしまうのか ・上記状況でも--progressを付与すると成功するのはなぜか ・(repo syncの中身は弄れないので)--progressなしでもjenkins上から成功できる方法はあるか となります。
回答: コメント欄で教えて頂いた以下より > > 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. > > > Git server側の設定によっては切断されてしまうとのことでした。 上記サイト内にも記載がありますが、サーバの設定を変えられる状況にない場合は--progressを付与するのがベターとのことなので git clone/fetchを使用する際は--progressを使用することといたします。 repoの場合これは不可能ですが、しょうがないのでrepo内のscriptを編集することで実施します。 (repo側の問題の様に思えます)