35

I registered 11 projects of GitLab runner. Runners of each project work fine except 1 project. First time I registered runner of this project, it works. But after I commit/push some changes, an error occurs and failed job. I saw some solutions that upgrading the git version solved a problem, but I don't think so. Because all of the runners work fine except this project.

Server OS: CentOS 7
git: 1.8.3.1

First time registered runner
>Running with gitlab-runner 11.9.2 (...)
  on (...)
Using Shell executor...
Running on localhost.localdomain...
Initialized empty Git repository in /home/gitlab-runner/(...)/.git/
Clean repository
Fetching changes with git depth set to 50...
Created fresh repository.
From https://gitlab.com/(...)
 * [new branch]      master     -> origin/master
Checking out (...) as master...
Skipping Git submodules setup
$ echo "> gitlab-ci started"
> gitlab-ci started
$ cd /home/(..)
$ echo "> git pull started"
> git pull started
$ git pull
remote: Total 0 (delta 0), reused 0 (delta 0)
Already up-to-date.
Job succeeded

Second commit/pull, then

>Running with gitlab-runner 11.9.2 (...)
  on (...)
Using Shell executor...
Running on localhost.localdomain...
Reinitialized existing Git repository in /home/gitlab-runner/(...)/.git/
Clean repository
Fetching changes with git depth set to 50...
fatal: remote origin already exists.
fatal: git fetch-pack: expected shallow list
ERROR: Job failed: exit status 1

edit. here is my .gitlab-ci.yml

stages:
- deploy

deploy_to_master:
  stage: deploy

  script:
  - echo "> gitlab-ci started"
  - cd /home/www/dir
  - echo "> git pull started"
  - git pull
  - echo "> permission set"
  - chmod 707 -R ./data/
  - chmod 707 -R ./plugin/nice/
  - chmod 707 ./favicon.ico
  - echo "> server reload(=httpd -k graceful)"
  - systemctl reload httpd

  only:
  - master

  tags:
  - tags
betontalpfa
  • 3,454
  • 1
  • 33
  • 65
Sungmin Park
  • 459
  • 1
  • 4
  • 7

8 Answers8

66

There are a few options to fix this. The problem is the version of git on your runner is too old. And sometimes you can't update git on the runner.

Options to fix:

  1. Upgrade to a newer version of git on the runner.

  2. In .gitlab-ci.yml, use the option to git clone:

variables:
  GIT_STRATEGY: clone
  1. Configure Gitlab, change Git strategy for pipelines of the project to "git clone".

    3.1. In the Gitlab web gui,

    3.2. go to your project,

    3.3. then: "Settings -> CI / CD -> General pipelines".

    3.4. Change the options for:

    • "Git strategy for pipelines" to: "git clone"
    • "Git shallow clone" to: 0
Kai
  • 33
  • 7
Ryan Daniels
  • 763
  • 7
  • 11
  • 2
    Thanks much, option #3 saved my life, since there were troubles related to updating git on my runner. – RAM237 May 29 '20 at 12:26
  • This should be the accepted answer, thank you very much! – root Jul 28 '20 at 07:13
  • 1
    "4." would be to set the strategy on just the runner (not entire the project) via `environment = ["GIT_STRATEGY=clone"]` within the `[[runners]]` stanza of the runner's config.toml. If you have multiple runners and only some have this problem, then this variant allows other runners to continue to use the more efficient "fetch" strategy. – Paul H. Hargrove Aug 16 '20 at 08:15
52

Centos 7 ships with git version 1.8.3.1 . This version doesn't support commands like git fetch-pack . To fix this problem, you could update git on your server from the IUS repository. update git on Centos 7 to version 2 from third-party IUS repo

$ git --version
git version 1.8.3.1
sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
sudo yum install git
CODE-REaD
  • 2,819
  • 3
  • 33
  • 60
  • 1
    Helpful note: running `sudo yum remove git*` will also remove `gitlab-runner`. Skip this step; it's not needed. Install the repo and `sudo yum install git`, and it will replace the old version with the newer one. – mbomb007 May 17 '21 at 15:55
5

You can go around this problem without upgrading git at all:

1. Clone Strategy

Set in .gitlab-ci.yml:

variables:
  GIT_STRATEGY: clone  

Now every change you make will trigger re-cloning the project, avoiding the need of the problematic git fetch-pack command.

2. Manually Remove Project Directory (not recommended)

Remove manually the build directory from gitlab-runner server, so it will have to clone it again.
For project testgroup/testproject, run:
careful with rm commands!

rm -rf /home/gitlab-runner/builds/UwnzuxxL/0/testgroup/testproject  

Notice that after builds directory you have a random string that will be different from this example.

Ofek Hod
  • 3,544
  • 2
  • 15
  • 26
5

Check value in your project's CI/CD settings on gitlab.com. If there is any value in 'git shallow clone' remove it and save changes. Now your pipeline will work as expected. see image

mate00
  • 2,727
  • 5
  • 26
  • 34
Franti3ek
  • 106
  • 1
  • 6
2

I had a similar issue, and I had to update Git. Centos 7 comes with git-1.8.x which has limitations around gitlab-ci.

Upgrade your git, based on this guide.

CODE-REaD
  • 2,819
  • 3
  • 33
  • 60
betontalpfa
  • 3,454
  • 1
  • 33
  • 65
  • Understand that by updating git from an outside source, you are accepting a risk of delayed updates and incompatibilities. Ensure you're okay with this or find a better solution for the Enterprise. – user2066657 Apr 13 '20 at 07:03
0

This worked for me.

3.1. In the Gitlab web gui,

3.2. go to your project,

3.3. then: "Settings -> CI / CD -> General pipelines".

3.4. Change the options for:

"Git shallow clone" to: 0

-1

I made a new project and, finally, it works fine. I don't know why the other one didn't work. If the same problems occurs like mine, don't get too serious: Just make a new gitlab project. It is good for your mental well-being.

user2066657
  • 444
  • 1
  • 4
  • 23
Sungmin Park
  • 459
  • 1
  • 4
  • 7
-2

rm -fr /home/gitlab-runner/(...) , clean then exists repository

  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Aug 14 '22 at 17:59