jenkins ne parvient pas à se connecter au référentiel git

11

Je ne peux pas configurer l'URL du référentiel git de manière à ce que Jenkins puisse y accéder.

sous "Projet> Configurer> Gestion du code source", j'ai défini l'URL du référentiel sur "git @ store: repositories / testproject.git"

Je reçois cette erreur:

Failed to connect to repository : Command "/usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

l'accès avec cette URL fonctionne sur un shell:

jenkins@dilbert:~$ /usr/bin/git -c core.askpass=true ls-remote -h git@store:repositories/testproject.git
git@store's password: 
4fd35a4f528e2f2921a52cfd03918b7cbde3d253    refs/heads/master

On me demande un mot de passe et ça marche.

J'ai associé le même mot de passe aux informations d'identification dans Jenkins à "git /" et j'ai également essayé "git @ store /". Aucun n'a fonctionné.

Veuillez noter qu'il ne s'agit pas de github, mais d'un dépôt git local.

mise à jour:

l'ajout de la clé de publication du maître jenkins à l'esclave de construction a aidé à faire fonctionner la configuration:

ssh-copy-id jenkins@dilbert

maintenant les builds échouent:

 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@store:repositories/testproject.git # timeout=10
Fetching upstream changes from git@store:repositories/testproject.git
 > /usr/bin/git --version # timeout=10
 > /usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from git@store:repositories/testproject.git
    at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:735)
    at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:983)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1016)
    at hudson.scm.SCM.checkout(SCM.java:484)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1270)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:609)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:531)
    at hudson.model.Run.execute(Run.java:1751)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:89)
    at hudson.model.Executor.run(Executor.java:240)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git -c core.askpass=true fetch --tags --progress git@store:repositories/testproject.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

store est le maître jenkins, dilbert est l'esclave de la construction. ssh du maître aux œuvres esclaves.

jenkins@store:~$ ssh dilbert uptime
 16:06:21 up 3 days, 18:53, 13 users,  load average: 0,31, 0,38, 0,50

des idées comment déboguer cela?

Jörg Beyer
la source

Réponses:

5

l'authentification fonctionne via ssh. avez-vous ajouté la clé ssh publique de l'utilisateur jenkins à l'utilisateur git sur votre serveur git?

faites-moi savoir si vous avez besoin d'instructions sur la façon de configurer l'authentification ssh et je modifierai ce message ici.

/ÉDITER:

heureux de l'avoir fait fonctionner. j'ai cherché sur le site officiel de jenkins un manuel détaillé sur la partie ssh de la configuration, mais je n'en ai pas trouvé.

voici donc un bref aperçu - faites-moi savoir si c'est ce dont vous avez besoin.

  1. l'esclave jenkins (la machine de construction) se connecte au serveur git (maître jenkins)
  2. la machine de construction fonctionne en tant qu'utilisateur jenkins (par exemple jenkins @ dilbert: ~ $)
  3. git-server fonctionne en tant qu'utilisateur git (par exemple git @ store: ~ $)
  4. la clé publique jenkins @ dilbert doit être placée dans git @ store authorized_keys
  5. exécuter jenkins@dilbert:~/.ssh$ ssh-copy-id git@storepour copier la clé publique jenkins @ dilbert ssh sur le serveur git
kindaleek
la source
pourriez-vous expliquer quels utilisateurs la clé ssh ajoute à où?
Jörg Beyer
l'utilisateur jenkins devrait avoir sa clé de publication stockée dans <répertoire utilisateur jenkins> /. ssh / id_rsa.pub celui-ci doit être ajouté au <répertoire utilisateur git> /. ssh / authorized_keys
kindaleek
faire "jenkins @ store: ~ / .ssh $ ssh-copy-id git @ store" amène les jenkins à accepter la configuration (ce qui est une amélioration), mais une compilation sur un esclave jenkins distant échoue. une idée?
Jörg Beyer
bon à lire. malheureusement, mon expérience avec git se termine à peu près là ... mais je me souviens d'un problème similaire au travail. je peux me tromper maintenant, mais vous devez travailler en tant qu'utilisateur (par exemple Joerg Beyer) sur la plate-forme git, non? veuillez y vérifier l'autorisation (vous pouvez modifier les autorisations des utilisateurs dans l'interface Web pour chaque groupe auquel ils appartiennent). essayez de le définir pour le développeur pour le test / EDIT: vous avez écrit l'esclave jenkins distant - s'il utilise une paire de clés différente, vous devez à nouveau ajouter la clé publique aux clés autorisées du git
kindaleek
pas certain. J'ai mis à jour la question. Quelle clé ssh dois-je ajouter où?
Jörg Beyer