Ich möchte, dass Jenkins Daten automatisch aus meinem auf Github gehosteten privaten Repository abruft. Aber ich habe keine Ahnung, wie ich diese Aufgabe erledigen soll. Ich habe die Dokumentation ausprobiert und einen SSH-Schlüssel für Jenkins Benutzer generiert. Alles, was ich sehen kann, ist: "Das Repo kann nicht geklont werden". Ich habe URLs überprüft - sie sind gültig.
Irgendwelche Hinweise, vielleicht kennen Sie einige Dokumente / Blogs / was auch immer, die solche Sachen beschreiben?
Antworten:
Vielleicht suchen Sie nach GitHubs Unterstützung für die Bereitstellung von Schlüsseln ? Um diese Seite zu zitieren:
Wenn Sie dies bereits versuchen und es nicht funktioniert, möchten Sie Ihre Frage möglicherweise mit weiteren Details zu den verwendeten URLs, den Namen und dem Speicherort der Schlüsseldateien usw. aktualisieren.
Nun zum technischen Teil: Wie verwende ich meinen SSH-Schlüssel mit Jenkins?
Wenn Sie beispielsweise einen
jenkins
Unix-Benutzer haben, können Sie Ihren Bereitstellungsschlüssel in speichern~/.ssh/id_rsa
. Wenn Jenkins versucht, das Repo über ssh zu klonen, versucht er, diesen Schlüssel zu verwenden.In einigen Setups können Sie Jenkins nicht als eigenes Benutzerkonto ausführen und möglicherweise auch nicht den Standardspeicherort für den SSH-Schlüssel verwenden
~/.ssh/id_rsa
. In solchen Fällen können Sie einen Schlüssel an einem anderen Ort erstellen, z. B.~/.ssh/deploy_key
konfigurierenssh
, um diesen mit einem Eintrag in~/.ssh/config
: zu verwenden.Da Sie sich bei allen Github-Repositorys mit authentifizieren
[email protected]
und nicht möchten, dass der obige Schlüssel für alle Ihre Verbindungen zu Github verwendet wird, haben wir einen Host-Alias github-deploy-myproject erstellt . Ihre Klon-URL wird jetztund das ist auch, was Sie als Repository-URL in Jenkins setzen.
(Beachten Sie, dass Sie müssen nicht setzen ssh: // vor , um diese an die Arbeit.)
quelle
ssh-keygen
wie der Benutzer Jenkins ausgeführt wird ("jenkins" auf meinem Ubuntu-Server). Ich habe dann~jenkins/.ssh/id_rsa.pub
den Abschnitt mit den Bereitstellungsschlüsseln des Repositorys auf github hinzugefügt.~
Verzeichnis geben. Aber/var/lib/jenkins/.ssh/
für den Standard-Jenkins-Benutzer, um diese Schlüssel zu verwenden!/var/lib/jenkins
ist , um den Kommentar von @garmoncheg weiterzuverfolgen .~
jenkins
Could not match github-deploy-myproject:myuser/myproject
im Hook-Protokoll. Ich habe das als meine Repo-URL eingegeben und Builds funktionieren, damit sie auf GitHub zugreifen können. Es ist nur der Beitrag von GitHub, der den Build nicht auslösen kann.Eine Sache, die das für mich zum Laufen gebracht hat,
github.com
ist sicherzustellen, dass das in ist~jenkins/.ssh/known_hosts
.quelle
Wenn Sie Jenkins benötigen, um auf mehr als ein Projekt zuzugreifen, müssen Sie:
1. einem Github-Benutzerkonto einen öffentlichen Schlüssel
hinzufügen 2. diesen Benutzer als Eigentümer (um auf alle Projekte zuzugreifen) oder als Mitarbeiter in jedem Projekt hinzufügen.
Viele öffentliche Schlüssel für einen Systembenutzer funktionieren nicht, da GitHub den ersten übereinstimmenden Bereitstellungsschlüssel findet und einen Fehler wie "FEHLER: Berechtigung für Benutzer / repo2 an Benutzer / repo1 verweigert" zurücksendet.
http://help.github.com/ssh-issues/
quelle
Jenkins erstellt einen Benutzer Jenkins auf dem System. Der SSH-Schlüssel muss für den Jenkins-Benutzer generiert werden. Hier sind die Schritte:
Jetzt können Sie einen Jenkins-Berechtigungsnachweis mit dem SSH-Schlüssel im Jenkins-Dashboard erstellen. Anmeldeinformationen hinzufügen
Wählen Sie diese Option
quelle
Ich hatte ein ähnliches Problem mit Gitlab. Es stellte sich heraus, dass ich die Benutzer eingeschränkt hatte, die sich über ssh anmelden dürfen. Dies hat keine Auswirkungen auf Github-Benutzer. Wenn jedoch Personen aufgrund von Gitlab-Problemen (und ähnlichen Problemen) hier landen, stellen Sie sicher, dass Sie
git
dieAllowUsers
Einstellungen in Folgendem hinzufügen/etc/ssh/sshd_config
:quelle
Eine weitere Option ist die Verwendung von GitHub-Token für den persönlichen Zugriff :
https://github.com/my-username/my-project.git
).github-token-for-my-username
Ich habe das auf Jenkins ver getestet. 2.222.1 und Jenkins GitHub Plugin 1.29.5 mit einem privaten GitHub Repo.
quelle
Eine Alternative zur Antwort von sergey_mo besteht darin, mehrere SSH-Schlüssel auf dem Jenkins-Server zu erstellen.
(Wie der erste Kommentator der Antwort von sergey_mo sagte, kann dies schmerzhafter sein als die Verwaltung eines einzelnen Schlüsselpaars.)
quelle