エンジニアの久保です。
ある日、GitLab CI を利用しているプジェクトで job を動かしたら以下のエラーで失敗するようになりました。
このときの対処方法をまとめました。
Running on runner via abcdef... Fetching changes... Reinitialized existing Git repository in /builds/example/example.com/.git/ error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed ERROR: Job failed: exit code 1
こちらの記事を参考に git clone する際に depth を指定するようにしました。
Optimizing GitLab for large repositories
対応方法としては3つあります。
状況に応じていずれかの方法で対応すればよさそうです。
その1:GitLab Runner の設定を変更する
GitLab Runner の設定を変更できる場合は、GitLab Runner の config.toml を次のように変更します。
concurrent = 4 [[runners]] url = "GITLAB_URL" token = "TOKEN" executor = "docker" builds_dir = "/builds" cache_dir = "/cache" environment = [ "GIT_DEPTH=10" ] [runners.docker] volumes = ["/builds:/builds", "/cache:/cache"]
具体的には、 [[runners]] セクションに以下を追加してください。
environment = [ "GIT_DEPTH=10" ]
その2: .gitlab-ci.yml に設定する
プロジェクトの .gitlab-ci-yml に環境変数として GIT_DEPTH を設定する方法です。
Runner Server の設定を変更できない場合や特定のプロジェクトだけ設定を変更したい場合はこちらの方法が良さそうです。
variables: GIT_DEPTH: 10 test: script: - ls -al
その3:GitLab の CI/CD Settings で設定する
GitLab の CI/CD Settings で設計可能な Variables で設定する方法です。
GitLab グループでまとめて設定したいが、Runner Server の設定を変更できない場合などで役立ちそうです。
変更結果
depth を指定した結果、これまでと同様に job を実行できるようになりました。
Running on runner via abcdef... Fetching changes with git depth set to 10... Reinitialized existing Git repository in /builds/example/example.com/.git/
結果より、git depth が変更されていることを確認できます。