it-swarm.com.de

Jenkins: Verbindung zum Repository konnte nicht hergestellt werden

Ich versuche, Jenkins mit einem Github-Repo zu verbinden.

Wenn ich die Repo-URL angeben, geben jenkins die folgende Fehlermeldung zurück: 

Fehler beim Herstellen der Verbindung zum Repository: Befehl "git ls-remote -h [email protected]: adolfosrs/jenkins-test.git HEAD" hat Statuscode 128: .__ zurückgegeben. stdout: stderr: Hostschlüsselüberprüfung fehlgeschlagen . fatal: Konnte nicht aus dem Remote-Repository lesen . Bitte vergewissern Sie sich, dass Sie die richtigen Zugriffsrechte haben und das Repository existiert.

Bei Verwendung des HTTPS: // Url gibt Jenkins Folgendes zurück:

Verbindung zum Repository fehlgeschlagen: Verbindung zu .__ fehlgeschlagen. https://github.com/adolfosrs/jenkins-test.git (status = 407)

Ich konnte das Repo erfolgreich auf demselben Rechner klonen, auf dem Jenkins ausgeführt wird, und außerdem den Befehl git ls-remote -h [email protected]:adolfosrs/jenkins-test.git HEAD ausführen. Ich habe also die richtige SSH bei Github.

29
adolfosrs

Das Problem war, dass ich irgendwie die ssh-Dateien mit dem root-Benutzer erstellt habe. Der Eigentümer der Dateien war also root. 

Die Lösung bestand lediglich darin, den Besitz des Jenkins-Benutzers zu ändern. 

chown jenkins id_rsa.pub 
chown jenkins id_rsa
16
adolfosrs

Dies ist ein sehr kniffliges Problem - selbst wenn Sie mit der Funktionsweise von https mit Zertifikaten vertraut sind (OTOH, wenn Sie meine Problemumgehung sehen, scheint das sehr logisch zu sein :)

Wenn Sie über http (s) von Shell eine Verbindung zu einem GIT-Repository herstellen möchten, müssen Sie sicherstellen, dass das öffentliche Zertifikat (als Datei) auf Ihrem Computer gespeichert ist. Dann fügen Sie dieses Zertifikat Ihrer GIT-Konfiguration hinzu

git config [--global] http.sslCAInfo "certificate"

(Ersetzen Sie "certificate" durch den vollständigen Pfad/Namen der PEM-Datei :)

Für die Verwendung von Shell würden Sie auch z. Geben Sie ein '.netrc' ein, das Ihre Anmeldeinformationen für den http-server login ..__ enthält. Danach können Sie einen 'git clone https: // ...' ohne interaktive Bereitstellung von Anmeldeinformationen ausführen.

Für den Jenkins-Service ist es jedoch ein bisschen anders ....__ Hier muss der Jenkins-Prozess das Serverzertifikat kennen - und verwendet nicht die Shell-Einstellungen (im Sinne der globalen Git-Konfigurationsdatei) '.gitconfig'): P

Ich musste einen weiteren Parameter zu den Startoptionen von Jenkins hinzufügen.

... -Djavax.net.ssl.trustStore = "Keystore" ...

(Ersetzen Sie "Keystore" durch den vollständigen Pfad/Namen wie unten beschrieben :)

Kopieren Sie nun die Keystore-Datei Ihres Webservers, die das Zertifikat enthält, in einen Pfad (ich weiß, dass dies ein schmutziger Hack ist und nicht genau sichere :) und verweise mit dem Parameter '-Djavax.net.ssl.trustStore =' darauf.

Nun akzeptiert der Jenkins-Service das Zertifikat vom Webserver, der das Repository über https bereitstellt. Konfigurieren Sie die GIT-Repository-URL wie

https://yourserver.com/ihr-repositorypath

Beachten Sie, dass Sie immer noch die '.netrc' unter dem jenkins-user-Home-Ordner für die Anmeldung benötigen !!! Was ich also beschreibe, ist als Workaround zu betrachten ... bis ein ordnungsgemäß funktionierendes Plugin für Anmeldeinformationen bereitgestellt wird. IMHO dieses Plugin (in seiner aktuellen Version 1.9.4) ist fehlerhaft.

Ich konnte den Credentials-Helper niemals von Jenkins zum Laufen bringen, egal was ich versuchte :( Im besten Fall habe ich einige Fehler über die nicht zugängliche temporäre Credential-Helper-Datei usw. gesehen in der Jenkins JIRA, aber keine Lösung. 

Wenn es jemandem klappt, dass es funktioniert, teilen Sie bitte das Wissen ...


P.S .: Verwendung der Jenkins-Plugins in den folgenden Versionen:

Plugin für Anmeldeinformationen 1.9.4, GIT-Client-Plugin 1.6.1, Jenkins GIT Plugin 2.0.1

6
Juergen Klasen

Ich hatte genau das gleiche Problem. So habe ich es auf dem Mac gelöst:

  1. Zu jenkins-Benutzer wechseln (Sudo -iu jenkins)
  2. Führen Sie Folgendes aus: ssh-keygen (Hinweis - Sie erstellen jetzt ssh-Schlüsselpaare für jenkins-Benutzer. Sie sollten etwa Folgendes anzeigen: Geben Sie eine Datei ein, in der der Schlüssel gespeichert werden soll (/Users/Shared/Jenkins/.ssh/id_rsa): 
  3. Drücken Sie die Eingabetaste, bis der Standardwert erreicht ist
  4. Führen Sie den Befehl aus, der in der Jenkins-Fehlermeldung in Ihrem Terminal angezeigt wird (z. B. "git ls-remote -h [email protected]: adolfosrs/jenkins-test.git HEAD")
  5. Sie werden gefragt, ob Sie fortfahren möchten. Sag ja
  6. Das Github-Repo wird zu Ihrer known_hosts-Datei hinzugefügt: /Users/Shared/Jenkins/.ssh/
  7. Gehen Sie zurück zum Jenkins-Portal und testen Sie Ihre Github-SSH-URL
  8. Es sollte funktionieren. Viel Glück
2
Caleb Cheng

Ich hatte ein ähnliches Problem, als ich versuchte, Jenkins in meinem Windows-Server mit meinem privaten GIT-Repo zu verbinden. Im Folgenden ist der Fehler aufgeführt, der im Abschnitt zur Quellcodeverwaltung des Jenkins-Jobs zurückgegeben wurde

Fehler beim Herstellen einer Verbindung zum Repository: Befehl "git.exe ls-remote -h ssh: //[email protected]_server/repo.git HEAD" gab den Statuscode 128 zurück: stdout: stderr: Ladeschlüssel "C:\Windows\TEMP\ssh4813927591749610777. key ": ungültiges Format git @ my_server: Berechtigung verweigert (publickey). fatal: Konnte nicht aus dem Remote-Repository lesen.

Bitte stellen Sie sicher, dass Sie die richtigen Zugriffsrechte haben und das Repository existiert.

Dieser Fehler wird ausgelöst, weil jenkins den privaten SSH-Schlüssel nicht aus seinem Benutzerverzeichnis auswählen kann. Ich habe das folgendermaßen gelöst

Schritt 1

Füllen Sie im Jenkins-Job die folgenden Informationen unter Source Code Management Aus.

Repositories

Repository-URL: ssh: //[email protected]_server/repo.git
Ausweise: -keine-

Schritt 2

In meinem Setup läuft jenkins unter einem lokalen Systemkonto, daher lautet das Benutzerverzeichnis C:\Windows\System32\config\systemprofile (Dies ist das Wichtigste in diesem Setup, das nicht sehr offensichtlich ist).

Erstellen Sie nun private und öffentliche ssh-Schlüssel mit ssh-keygen -t rsa -C "key label" Über die git bash - Shell. Der private und der öffentliche ssh-Schlüssel befinden sich im Verzeichnis .ssh Ihres angemeldeten Benutzerverzeichnisses. Kopieren Sie einfach den Ordner .ssh und fügen Sie ihn unter C:\Windows\System32\config\systemprofile Ein.

Schritt 3

Fügen Sie Ihren öffentlichen Schlüssel Ihrem GIT-Serverkonto hinzu. Führen Sie den Jenkins-Job aus und Sie sollten nun in der Lage sein, über ssh von Jenkins aus eine Verbindung zum GIT-Konto herzustellen.

2
Rajaraman

In unserem Fall musste git auf dem Jenkins-Server installiert werden.

2
030

Jenkins läuft als ein anderer Benutzer, nicht wie Ihr gewöhnliches Login . So machen Sie das ssh-Problem:

  1. Melden Sie sich als jenkins su jenkins.__ an. (Sie müssen möglicherweise zuerst Sudo passwd jenkins tun, um das Kennwort für jenkins festlegen zu können. Ich konnte die Standardeinstellung nicht finden ...)
  2. Ssh-Schlüsselpaar generieren: ssh-keygen
  3. Kopieren Sie den öffentlichen Schlüssel (id_rsa.pub) in Ihr Github-Konto (oder wo auch immer)
  4. Kopieren Sie das Repo als Jenkins , damit der Host Jenkins known_hosts hinzugefügt wird, was zu tun ist. Wenn Sie möchten, können Sie das geklonte Repo jetzt wieder entfernen.
2
David Engdal

Überprüfen Sie mit den folgenden Einstellungen. Das funktioniert immer für mich.

Jenkins Konfiguration: 

1) Prüfen Sie, ob die ausführbare git-Datei richtig angegeben ist 

2) Stellen Sie den SSH-Repository-Link git @ blahblah bereit 

3) Unter Anmeldeinformationen >> Benutzername und Authentifizierungsschlüssel auswählen (gehen Sie zu Ihrem Server, SSH-Schlüssel generieren ssh-keygen ... Kopieren Sie die Schlüssel nach JENKINS_HOME /, ssh)

2
Harshal Vaidya

Unter Ubuntu platzieren Sie Ihre id_rsa und id_rsa.pub -Dateien in /var/lib/jenkins/.ssh

Lass Jenkins sie besitzen Sudo chown -R jenkins /var/lib/jenkins/.ssh/

Stellen Sie sicher, dass der Jenkins-Schlüssel als Bereitstellungsschlüssel mit RW-Zugriff in GitHub (oder ähnlichem) hinzugefügt wird. Verwenden Sie dazu die id_rsa.pub-Taste.

Jetzt sollte alles mit dem SCM Sync Plugin funktionieren.

1
Joseph Lust

In meinem Fall habe ich die Datei known_hosts mit dem Benutzer root bearbeitet. Daher wurde der Dateieigentümer in root geändert, und der Benutzer von jenkins begann mit dem Abwurf "[email protected]: xxxxxx/xxxx.git HEAD" gab den Statuscode 128 zurück: stdout: stderr: Fehler beim Überprüfen des Hostschlüssels beim Klonen von git image . Durch die Wiederherstellung des Eigentums wurde das Problem behoben.

0
funny_head

In meinem Fall habe ich dieses Problem durch gelöst

  • klicken Sie auf die Schaltfläche Add Dies ist neben dem Text "Anmeldeinformationen"
  • anmeldeinformationen hinzufügen (login und password)
  • wählen Sie diese Anmeldeinformationen im Popup-Menü links von Add Taste
  • warten auf ein paar Sekunden

Meine Umgebung war Jenkins, der unter Windows installiert wurde. Die Frage der Benutzeroberfläche lautete, warum die Warnung vor das Tool gestellt wurde, um sie zu beheben.

0
Roman

Lassen Sie mich hier hinzufügen, dass ein sehr untergeordnetes Problem, das diese Art von Fehler erzeugen könnte, die fehlende .git-Erweiterung in der Repository-URL ist. Stellen Sie sicher, dass Sie die vollständig qualifizierte URL eingeben, die mit .git endet. Ich benutze bitbucket, also klicke ich auf "klonen" und die vollständig qualifizierte URL wird automatisch für mich generiert. Bei github gibt es einen ähnlichen Ansatz.

0
user7123229

Stellen Sie sicher, dass der RSA-Host-Schlüssel und die IP-Adresse des Bitbucket-Servers zur Datei 'known hosts' hinzugefügt werden. Der Inhalt sollte so aussehen 

bitbucket.org,xx.xx.xx.xx ssh-rsa Host_key

Denken Sie daran, für alle Dateien in /var/lib/jenkins/.ssh/ den Besitz in Jenkins zu ändern.

0
shark1608

Bisher nicht erwähnt, aber dies kann auch von Stash kommen ..__ Wir sind auf das gleiche Problem gestoßen, die Ursache für unser Problem war, dass die Stash-Instanz, die wir für Jenkins verwenden, abstürzt. Durch den Neustart des Stashs wurde es in unserem Fall gelöst.

0