Jenkins stellt keine Verbindung zum Git-Repository her

11

Ich kann die Git-Repository-URL nicht so konfigurieren, dass Jenkins darauf zugreifen kann.

Unter "Projekt> Konfigurieren> Quellcodeverwaltung" setze ich die Repository-URL auf "git @ store: repositories / testproject.git".

Ich erhalte diesen Fehler:

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.

Der Zugriff mit dieser URL funktioniert auf einer 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

Ich werde nach einem Passwort gefragt und es funktioniert.

Ich habe "git /" das gleiche Passwort für Anmeldeinformationen in Jenkins zugeordnet und auch "git @ store /" ausprobiert. Keiner hat funktioniert.

Bitte beachten Sie, dass es sich nicht um Github handelt, sondern um ein lokales Git-Repository.

aktualisieren:

Das Hinzufügen des Pub-Schlüssels vom Jenkins-Master zum Build-Slave half dabei, die Konfiguration zum Laufen zu bringen:

ssh-copy-id jenkins@dilbert

Jetzt schlagen die Builds fehl:

 > /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.

Laden ist der Jenkins-Meister, Dilbert ist der Build-Sklave. SSH vom Master zum Slave funktioniert.

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

Irgendwelche Ideen, wie man das debuggt?

Jörg Beyer
quelle

Antworten:

5

Die Authentifizierung funktioniert über ssh. Haben Sie den öffentlichen SSH-Schlüssel des Jenkins-Benutzers zum Git-Benutzer auf Ihrem Git-Server hinzugefügt?

Lassen Sie mich wissen, wenn Sie Anweisungen zum Einrichten der SSH-Authentifizierung benötigen, und ich werde diesen Beitrag hier bearbeiten.

/BEARBEITEN:

Ich bin froh, dass du es zum Laufen gebracht hast. Ich habe auf der offiziellen Jenkins-Website nach einem detaillierten Handbuch zum SSH-Teil der Konfiguration gesucht, aber ich konnte keines finden.

Hier ist ein kurzer Überblick - lassen Sie mich wissen, ob Sie dies benötigen.

  1. Jenkins Slave (die Baumaschine) verbindet sich mit dem Git-Server (Jenkins Master)
  2. Gebäudemaschine läuft als Jenkins-Benutzer (zB Jenkins @ Dilbert: ~ $)
  3. git-server läuft als git user (zB git @ store: ~ $)
  4. Der öffentliche Schlüssel von jenkins @ dilbert muss in git @ store Authorized_keys abgelegt werden
  5. Führen Sie aus, jenkins@dilbert:~/.ssh$ ssh-copy-id git@storeum den öffentlichen Schlüssel von jenkins @ dilbert ssh auf den Git-Server zu kopieren
kindaleek
quelle
Könnten Sie bitte erklären, welche Benutzer ssh-key wo hinzufügen?
Jörg Beyer
Der jenkins-Benutzer sollte seinen Pub-Schlüssel in <jenkins user home dir> /. ssh / id_rsa.pub gespeichert haben. Dieser muss zu <git user home dir> /. ssh / autorisierte_keys
hinzugefügt werden
Wenn Sie "jenkins @ store: ~ / .ssh $ ssh-copy-id git @ store" ausführen, akzeptieren die Jenkins die Konfiguration (das ist eine Verbesserung), aber ein Build auf einem Remote-Jenkins-Slave schlägt fehl. irgendeine Idee?
Jörg Beyer
gut zu lesen. Leider endet meine Erfahrung mit Git so ziemlich dort ... aber ich erinnere mich an ein ähnliches Problem bei der Arbeit. Ich könnte mich jetzt irren, aber du musst als Benutzer (zB Jörg Beyer) auf der Git-Plattform arbeiten, oder? Bitte überprüfen Sie dort die Berechtigung (Sie können die Benutzerberechtigungen in der Weboberfläche für jede Gruppe ändern, zu der sie gehören). Versuchen Sie, es zum Testen / Bearbeiten auf Entwickler zu setzen : Sie haben Remote Jenkins Slave geschrieben - wenn es ein anderes Schlüsselpaar verwendet, müssen Sie den öffentlichen Schlüssel erneut zu den autorisierten Schlüsseln des Git hinzufügen
kindaleek
nicht sicher. Ich habe die Frage aktualisiert. Welchen SSH-Schlüssel muss ich wo hinzufügen?
Jörg Beyer