Problema GitLab CI cu repo privat si submodule git

De 3 ore incerc sa ii dau de cap cum sa fac sa se logheze cu SSH gitlab-runner pentru a face clone recursiv la submodule.

Running with gitlab-runner 10.0.1 (e991d1b4)
  on test server (3296fc4a)
Using Shell executor...
Running on test...
Fetching changes...
HEAD is now at 3168554 Wubba, lubba, dub, dub
From https://gitlab.com/.../server
   3168554..d47ec23  master     -> origin/master
Checking out d47ec230 as master...
Updating/initializing submodules recursively...
Synchronizing submodule url for 'client_packages'
Cloning into 'client_packages'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of '[email protected]:.../client.git' into submodule path 'client_packages' failed
ERROR: Job failed: exit status 1

Teoretic

before_script:
  - eval git config --global user.name "istvan"
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_KEY")

variables:
  GIT_SUBMODULE_STRATEGY: recursive

ar fi trebui sa mearga.

Am facut SSH_KEY in Settings -> CI/CD -> Secret variables cu cheia privata pe care am pus-o pe vps-ul cu gitlab-runner. (functionala 100%)

Solutia pe care am gasit-o cu debug cu ssh -vT [email protected] a fost sa copiez cheia id_rsa in /home/gitlab-runner/.ssh/.

Dar poate stie cineva de ce nu vrea sa mearga before_script-ul.

Rulezi prin docker sau direct shell?

Să nu fie (și) chestia asta de vină, care te întreabă dacă vrei să adaugi host-ul:

before_script:
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

Eu mă uit în scriptul meu și nu am nici un eval. Ar putea fi și ăsta un motiv?

before_script:
  - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  - php composer-setup.php
  - php composer.phar install --no-dev -o --prefer-dist
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - mkdir -p ~/.ssh
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  - ssh-add <(echo "$PRIVATE_KEY")
2 Likes

Folosesc shell, Host StrictHostKeyChecking no l-am pus manual.
Hmm.

La tine nu stiu cum iti merge ssh-add fara ssh-agent rulat inainte. Am folosit eval fiindca nu imi mergea echo fara eval.

ssh-agent ruleaza de obicei de la inceputul unei sesiuni, n-ar trebui sa mai trebeasca sa-l pornesti de mana. IDK daca e asa si pe server de CI.

Ironia e ca nu imi mai trebuie submodules pentru build, tocmai mi-a recomandat cineva ca in loc de submodules din build sa folosesc direct npm publish si npm install sau yarn.

Am facut si teste la $SSH_KEY, - "echo $SSH_KEY" merge si cu eval si fara, eval e util doar ca sa nu pui toata linia in “”

In plus nu folositi ’ in loc de " in shellscript fiindca nu va mai interpreteaza variabilele.