GitLabをオンプレで利用していてgit clone中にearly EOFエラーでクローンできない場合の対処法

GitLabにGitリポジトリを作成して利用しているが、ある時git cloneができなくなって困ったので対処方法をメモしておく。

 

 

[エラー概要]

なぜか巨大なバイナリファイルが入ってしまっているGitリポジトリがGitLab上にあった。

これをJenkinsのビルドジョブの中でクローンしようとしたところ、以下のようなエラーが発生した。

$ git clone https://my-gitlab-url/my-repository.git
fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

 

[解決策候補]

Google先生に「fatal: index-pack failed」についてたずねると、いくつか解決策があるようだった。

 

Git一般の解決策としては以下の3つがあるようだ。 

1.gitのhttp通信制限を増やす
2.サーバー側でgc&repackする
3.そもそも一度にcloneする量を減らす

qiita.com

http通信制限を増やしたがエラー内容は変わらなかった。

 

サーバー側で、つまりはGitLab側でgc&repackについては、実施しようと試みたが、オンプレ版GitLabをセットアップした人が捕まらず、gitのサーバー側の設定がわからずこれは実施に至らなかった。そのため効果は不明である。

 

以前に同じリポジトリをローカルのマシンにクローンした際は、3で上手くいったのを覚えている。今回も同じように対応しようとしたが、リポジトリに含まれるファイルサイズが大きくなったせいか、git clone --depth 1 https://my-gitlab-url/my-repository.gitでも上手くいかなかった。

 

さらに検索を進めると、GitLabのタイムアウト時間を延長する方法があることが分かった。

gitlab.com

GitLabのサーバー上で、/etc/gitlab/gitlab.rbファイルを編集する。タイムアウトのデフォルト値は30秒らしいので、以下のように60秒に設定した。

unicorn['worker_timeout'] = 60

 

このままgit cloneを実行するとやはりエラーが出る。GitLabの設定反映を行う必要があった。

https://docs.gitlab.com/ee/administration/restart_gitlab.html

 

GitLabのサーバー上で以下のコマンドを実施し、設定を反映させる。

sudo gitlab-ctl reconfigure

 

しかしエラー内容が変わらない……。

 

[This worked for me]

さらに調査を進めると、以下のページを見つけた。

gitlab.com

 

タイムアウトの設定値を600にしたら上手くいった、と。

このコメントを信じて再度設定を行う。GitLabのサーバー上で、/etc/gitlab/gitlab.rbファイルを編集する。

unicorn['worker_timeout'] = 600

 

編集が終わったら、GitLabのサーバー上で以下のコマンドを実施し、設定を反映させる。

sudo gitlab-ctl reconfigure

 

これで無事Jenkinsのビルドジョブでgit cloneを実行することができた。

ただし今回の方法では解決しないケースもある模様。奥が深い……。

ja.stackoverflow.com

 

[まとめ]

GitLabでgit cloneできないときは以下のどれかが効く、かも。