it-swarm.com.de

Authentifizieren Sie Jenkins CI für das private Github-Repository

Ich möchte, dass Jenkins automatisch Daten aus meinem auf Github gehosteten privaten Repository abruft. Aber ich habe keine Ahnung, wie ich diese Aufgabe ausführen soll. Ich habe die Dokumentation ausprobiert, einen SSH-Schlüssel für Jenkins-Benutzer generiert und alles, was ich sehen kann, ist: "Repo kann nicht geklont werden". Ich habe URLs überprüft - sie sind gültig.

Irgendwelche Hinweise, vielleicht kennst du ein paar Dokumente/Blogs/was auch immer, die solche Sachen beschreiben?

132
bx2

Vielleicht ist GitHubs Unterstützung für Schlüssel bereitstellen das, wonach Sie suchen? So zitieren Sie diese Seite:

Wann sollte ich einen Bereitstellungsschlüssel verwenden?

Einfach, wenn Sie einen Server haben, der Pull-Zugriff auf ein einzelnes privates Repo benötigt. Dieser Schlüssel wird direkt an das Repository und nicht an ein persönliches Benutzerkonto angehängt.

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 ~/.ssh/id_rsa Speichern. Wenn Jenkins versucht, das Repo über ssh zu klonen, wird versucht, 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 ~/.ssh/id_rsa Verwenden. In solchen Fällen können Sie einen Schlüssel an einem anderen Ort erstellen, z. ~/.ssh/deploy_key Und konfigurieren Sie ssh, um dies mit einem Eintrag in ~/.ssh/config Zu verwenden:

Host github-deploy-myproject
    HostName       github.com
    User           git
    IdentityFile   ~/.ssh/deploy_key
    IdentitiesOnly yes

Da Sie sich bei allen Github-Repositorys mit [email protected] Authentifizieren und nicht möchten, dass der obige Schlüssel für alle Ihre Verbindungen zu Github verwendet wird, haben wir einen Host-Alias ​​erstellt github-deploy-myproject. Ihre Klon-URL wird jetzt

git clone github-deploy-myproject:myuser/myproject

und das ist es auch, was du als Repository URL in Jenkins eingibst.

(Beachten Sie, dass Sie nichtssh: // voranstellen müssen, damit dies funktioniert.)

136
Mark Longair

Eine Sache, die das für mich zum Funktionieren gebracht hat, ist sicherzustellen, dass github.com ist in ~jenkins/.ssh/known_hosts.

36
Edward Samson

Wenn Sie Jenkins benötigen, um auf mehr als 1 Projekt zuzugreifen, müssen Sie:
1. Fügen Sie einem Github-Benutzerkonto einen öffentlichen Schlüssel hinzu
2. Fügen Sie diesen Benutzer als Eigentümer (um auf alle Projekte zuzugreifen) oder als Mitbearbeiter in jedem Projekt hinzu.

Viele öffentliche Schlüssel für einen Systembenutzer funktionieren nicht, da GitHub den ersten übereinstimmenden Bereitstellungsschlüssel findet und einen Fehler zurücksendet wie "FEHLER: Berechtigung an Benutzer/repo2 an Benutzer/repo1 verweigert"

http://help.github.com/ssh-issues/

13
Sergii Mostovyi

Jenkins erstellt einen Benutzer Jenkins auf dem System. Der SSH-Schlüssel muss für den Jenkins-Benutzer generiert werden. Hier sind die Schritte:

Sudo su jenkins -s /bin/bash
cd ~
mkdir .ssh // may already exist
cd .ssh
ssh-keygen

Jetzt können Sie einen Jenkins-Berechtigungsnachweis mithilfe des SSH-Schlüssels im Jenkins-Dashboard Anmeldeinformationen hinzufügen erstellen

wählen Sie diese Option

Privater Schlüssel: Vom Jenkins-Master ~/.ssh

6
Ray

Ich hatte ein ähnliches Problem mit Gitlab. Es stellte sich heraus, dass ich die Benutzer, die sich über ssh anmelden dürfen, eingeschränkt hatte. Dies hat keine Auswirkungen auf Github-Benutzer. Falls jedoch Probleme mit Gitlab (und Ähnlichem) auftreten, müssen Sie git zur Einstellung AllowUsers in /etc/ssh/sshd_config Hinzufügen:

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
AllowUsers batman git
1
Jon