Obtention de GitLab CI pour cloner des dépôts privés

J'ai mis en place GitLab & GitLab CI pour héberger et tester certaines de mes prises en pension privées. Pour mes modules composer sous ce système, J'ai mis en place Satis pour résoudre mes paquets privés.

Évidemment, ces paquets ont besoin d'une clé ssh pour les cloner, et j'ai ce travail dans le terminal - je peux courir compositeur installer et obtenir ces paquets, tant que j'ai la clé ajoutée avec ssh-add dans la coquille.

cependant, lors de l'exécution de mes tests dans GitLab CI, si un projet a l'une de ces dépendances les tests ne seront pas terminés car mon instance GitLab a besoin d'authentification pour obtenir les Dep (évidemment), et le test échoue en disant Host key verification failed.

ma question Est de savoir comment configurer cela pour que lorsque le coureur exécute le test, il puisse s'authentifier en gitlab sans mot de passe? J'ai essayé de mettre une clé SSH sans mot de passe dans mes coureurs ~/.ssh dossier, Cependant le build n'ajoutera même pas la clé, " eval ssh-agent -s " suivi de ssh-add semble échouer en disant que l'agent n'est pas exécuter...

24
demandé sur CSchulz 2014-09-05 19:26:18

7 réponses

je poste ceci comme réponse puisque d'autres N'étaient pas complètement clairs et/ou détaillés IMHO

à partir de GitLab 8.12+, en supposant que le repo submodule est dans le même serveur que celui qui le demande, vous pouvez maintenant:

  1. configurer le repo avec submodules comme d'habitude (git submodule add git@somewhere:folder/mysubmodule.git)

  2. Modifier .gitmodules le fichier comme suit

    [submodule "mysubmodule"]
      path = mysubmodule
      url = ../../group/mysubmodule.git
    

    où"../../groupe/mysubmodule.git est un chemin relatif à partir de votre référentiel pour le sous-module.

  3. Ajoutez les lignes suivantes gitlab-ci.yml

    variables:
      GIT_SUBMODULE_STRATEGY: recursive
    

    pour demander au coureur de récupérer tous les sous-modules avant la construction.

avertissement: si votre coureur semble ignorer le GIT_SUBMODULE_STRATEGY directive, vous devriez probablement envisager mise à jour.

(source: https://docs.gitlab.com/ce/ci/git_submodules.html)

12
répondu Marco A. 2017-02-14 11:01:34

voici un howto complet:

Conception Générale

  • générer une paire de clés SSH
  • ajouter le privé comme variable d'environnement sécurisé de votre projet
  • faire le secteur privé à la disposition de vos scripts de test sur GitLab-CI
  • ajouter la clé publique comme clé de déploiement sur chacune de vos dépendances privées

Génération d'une paire de public et de privé de clés SSH

générer un paire de clés SSH publiques et privées sans phrase de passe:

ssh-keygen -b 4096 -C "<name of your project>" -N "" -f /tmp/name_of_your_project.key

ajouter la touche SSH privée à votre projet

vous devez ajouter la clé comme variable d'environnement sécurisé à votre projet comme suivantes:

  • parcourir https://<gitlab_host>/<group>/<project_name>/variables
  • cliquez sur "Ajouter une variable"
  • remplir le champ de texte KeySSH_PRIVATE_KEY
  • remplir le champ de texte Value avec le secteur privé clé SSH lui-même
  • cliquez sur "Enregistrer les changements"

Exposition le privé clé SSH pour vos scripts de test

afin de rendre votre clé privée disponible pour vos scripts de test, vous devez ajouter la suite de votre .gitlab-ci.yml fichier:

before_script:
  # install ssh-agent
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  # run ssh-agent
  - eval $(ssh-agent -s)
  # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  # disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
  # WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
  - mkdir -p ~/.ssh
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

Extrait de Code vient de GitLab documentation

ajouter la clé SSH publique comme clé de déploiement à toutes vos dépendances privées

vous devez enregistrer la clé publique SSH comme clé de déploiement de tous vos privé les dépendances de la manière suivante:

  • parcourir https://<gitlab_host>/<group>/<dependency_name>/deploy_keys
  • cliquez sur "Nouveau déployer touche"
  • remplir le champ de texte Title avec le nom de votre projet
  • remplir le champ de texte Key avec la clé SSH publique elle-même
  • cliquez sur"Créer une clé de déploiement"
34
répondu toch 2017-01-04 16:15:03

corrigé ceci en ajoutant la clé à known-hosts avec ssh-keyscan -H 'localgitlab.co.uk' >> ~gitlab_ci_runner/.ssh/known_hosts

4
répondu danbroooks 2014-09-06 16:40:21

si vous ne voulez pas tripoter avec les touches ssh ou les sous-modules, vous pouvez outrepasser la mise à jour dans la configuration de git pour vous authentifier avec le jeton job à la place (dans gitlab-ci.yml):

before_script:
  - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.example.com/group/repo.git".insteadOf git@gitlab.example.com:group/repo.git
2
répondu a544jh 2018-06-25 13:35:29

j'ai utilisé déployer des jetons pour résoudre ce problème, car configurer des clés SSH pour un coureur de test semble un peu long.

git clone http://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

les tokens deploy sont par projet et ne sont lus que.

1
répondu Juddling 2018-08-11 14:49:22

j'ai eu un scénario où j'ai dû utiliser ma clé ssh dans 3 différents scripts, j'ai donc mis la clé ssh de choses dans un seul script shell appelé en premier, avant les 3 autres scripts. Cela a fini par ne pas fonctionner, je pense en raison de la ssh-agent ne pas persister entre les scripts shell, ou quelque chose à cet effet. J'ai fini par sortir la clé privée dans la zone!--3 -- > fichier, qui va certainement persister à d'autres script.

.gitlab-ci.yml

script:
    - ci/init_ssh.sh
    - git push # or whatever you need ssh for

ci/init_ssh.sh

# only run in docker:
[[ ! -e /.dockerenv ]] && exit 0

mkdir -p ~/.ssh
echo "$GITLAB_RUNNER_SSH_KEY" > ~/.ssh/id_rsa
chmod 400 ~/.ssh/id_rsa
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > /.ssh/config

Il fonctionne comme un charme!

0
répondu user3246077 2017-06-15 21:08:55

Semble qu'il y ait enfin un solution raisonnable.

.submodules et git submodule update --init simplement

0
répondu Eri Rubin 2017-11-09 01:58:06