Autentica l’elemento grafico di Jenkins per il repository privato Github

Vorrei che Jenkins recuperasse automaticamente i dati dal mio repository privato ospitato su Github. Ma non ho idea di come realizzare questo compito .. Ho provato la documentazione, generando ssh-key per l’utente jenkins e tutto quello che posso vedere è: “imansible clonare il repository”. Ho controllato gli URL: sono validi.

Qualche indizio, forse conosci qualche documento / blog / qualunque cosa stia descrivendo questo genere di cose?

Forse il supporto di GitHub per la distribuzione delle chiavi è quello che stai cercando? Per citare quella pagina:

Quando dovrei usare una chiave di distribuzione?

Semplice, quando hai un server che ha bisogno di accedere a un unico repository privato. Questa chiave è collegata direttamente al repository anziché a un account utente personale.

Se è quello che stai già provando e non funziona, potresti aggiornare la tua domanda con maggiori dettagli sugli URL utilizzati, i nomi e la posizione dei file chiave, ecc.


Ora per la parte tecnica: come usare la chiave SSH con Jenkins?

Se si dispone, ad esempio, di un utente jenkins unix, è ansible memorizzare la chiave di distribuzione in ~/.ssh/id_rsa . Quando Jenkins prova a clonare il repository tramite ssh, proverà a usare quella chiave.

In alcune configurazioni, non è ansible eseguire Jenkins come account utente personale e, eventualmente, non è ansible utilizzare la posizione chiave ssh predefinita ~/.ssh/id_rsa . In questi casi, è ansible creare una chiave in una posizione diversa, ad esempio ~/.ssh/deploy_key e configurare ssh per utilizzarla con una voce in ~/.ssh/config :

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

Poiché tutti ti autentichi in tutti i repository Github usando git@github.com e non vuoi che la chiave sopra sia usata per tutte le tue connessioni a Github, abbiamo creato un alias host github-deploy-myproject . Il tuo URL clone ora diventa

 git clone github-deploy-myproject:myuser/myproject 

e questo è anche ciò che hai inserito come URL di repository in Jenkins.

(Nota che non devi mettere ssh: // in primo piano affinché funzioni.)

Una cosa che ha funzionato per me è assicurarsi che github.com sia in ~jenkins/.ssh/known_hosts .

Se hai bisogno di Jenkins per accedere a più di 1 progetto, dovrai:
1. aggiungi la chiave pubblica a un account utente github
2. aggiungere questo utente come proprietario (per accedere a tutti i progetti) o come collaboratore in ogni progetto.

Molte chiavi pubbliche per un utente di sistema non funzioneranno perché GitHub troverà la prima chiave di distribuzione corrispondente e invierà un errore come “ERRORE: Permesso all’utente / repo2 negato all’utente / repo1”

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

Jenkins crea un utente Jenkins sul sistema. La chiave ssh deve essere generata per l’utente Jenkins. Ecco i passaggi:

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

Ora puoi creare una credenziale Jenkins usando il tasto SSH Nella dashboard di Jenkins Aggiungi credenziali

seleziona questa opzione

Chiave privata: dal master Jenkins ~ / .ssh

Ho avuto un problema simile con gitlab. Risulta che ho limitato gli utenti che possono accedere tramite ssh. Ciò non influenzerà gli utenti di github, ma nel caso in cui le persone finiscano qui per problemi di gitlab (e simili), assicurati di aggiungere git all’impostazione AllowUsers in /etc/ssh/sshd_config :

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

Un’alternativa alla risposta di sergey_mo è creare più chiavi ssh sul server jenkins.

(Anche se, come ha detto il primo commentatore alla risposta di sergey_mo, questo potrebbe finire per essere più doloroso della gestione di una singola coppia di chiavi).