2016-02-10 21 views
9

Ho un repository git che ha un sottomodulo. Entrambi appartengono a un team su BitBucket. La mia macchina jenkins è un server Windows AWS con il plugin git. Sto usando le chiavi SSH per l'autenticazione. Ho tre lavori jenkins. Uno clona il repository principale. Questo ha successo Uno clona il secondo repository da solo (il repository che verrà utilizzato come sottomodulo). Anche questo ha successo. Nel mio terzo lavoro di costruzione dico a jenkins di aggiornare ricorsivamente i sottomoduli. Questo fallisce e dice errore di chiave pubblica. Come può essere il caso se riesco a clonare il repository da solo?Errore nell'aggiornamento del modulo git Jenkins

uscita della console di seguito:

Started by user anonymous 
Building on master in workspace C:\Program Files (x86)\Jenkins\jobs\MainRepo\workspace 
Wiping out workspace first. 
Cloning the remote Git repository 
Cloning repository [email protected]:team/mainrepo.git 
> git.exe init C:\Program Files (x86)\Jenkins\jobs\mainrepo\workspace # timeout=10 
Fetching upstream changes from [email protected]:team/mainrepo.git 
> git.exe --version # timeout=10 
using GIT_SSH to set credentials 
> git.exe -c core.askpass=true fetch --tags --progress [email protected]:team/mainrepo.git +refs/heads/*:refs/remotes/origin/* 
> git.exe config remote.origin.url [email protected]:team/mainrepo.git # timeout=10 
> git.exe config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 
> git.exe config remote.origin.url [email protected]:team/mainrepo.git # timeout=10 
Fetching upstream changes from [email protected]:team/mainrepo.git 
using GIT_SSH to set credentials 
> git.exe -c core.askpass=true fetch --tags --progress [email protected]:team/mainrepo.git +refs/heads/*:refs/remotes/origin/* 
> git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10 
> git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10 
Checking out Revision 6b3f6535c45e79ee88f4918d464edead48d83369 (refs/remotes/origin/master) 
> git.exe config core.sparsecheckout # timeout=10 
> git.exe checkout -f 6b3f6535c45e79ee88f4918d464edead48d83369 
> git.exe rev-list 6b3f6535c45e79ee88f4918d464edead48d83369 # timeout=10 
> git.exe remote # timeout=10 
> git.exe submodule init # timeout=10 
> git.exe submodule synC# timeout=10 
> git.exe config --get remote.origin.url # timeout=10 
> git.exe submodule update --init --recursive 
FATAL: Command "git.exe submodule update --init --recursive" returned status code 128: 
stdout: 
stderr: Cloning into 'my-submodule'... 
Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 
fatal: clone of '[email protected]:team/my-submodule.git' into submodule path 'my-submodule' failed 

hudson.plugins.git.GitException: Command "git.exe submodule update --init --recursive" returned status code 128: 
stdout: 
stderr: Cloning into 'my-submodule'... 
Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 
fatal: clone of '[email protected]:team/my-submodule.git' into submodule path 'my-submodule' failed 

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1693) 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$500(CliGitAPIImpl.java:62) 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$7.execute(CliGitAPIImpl.java:953) 
    at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:90) 
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1098) 
    at hudson.scm.SCM.checkout(SCM.java:485) 
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1276) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:607) 
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529) 
    at hudson.model.Run.execute(Run.java:1738) 
    at hudson.matrix.MatrixBuild.run(MatrixBuild.java:301) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:410) 
Finished: FAILURE 
+0

Stai utilizzando le stesse credenziali Jenkins per tutti e tre i lavori? Eseguono tutti sulla stessa istanza AWS? E usi lo stesso account utente per eseguire i comandi Git in tutti e tre i lavori? Vedo che il lavoro non funzionante utilizza l'account "anonimo". –

+0

Sì, tutto nella stessa istanza AWS. Tutti utilizzano le stesse credenziali della chiave ssh. Non ho installato account utente, sono solo io che lo uso al momento. – SlimCheney

risposta

0

Questo è era un bug noto in Jenkins: https://issues.jenkins-ci.org/browse/JENKINS-20941 ma ora è stato risolto, aggiornare il plugin di Git per risolvere il problema.

Se l'aggiornamento non è possibile, come soluzione alternativa, è possibile inserire la chiave nella cartella .ssh di jenkins-users.

+0

Sto eseguendo jenkins come account di sistema locale su un server Windows quindi quello che ho finito è stato mettere la mia cartella .ssh in C: /. Ssh e impostare la variabile di ambiente HOME su C:/ – SlimCheney

+0

C'erano sicuramente alcune autorizzazioni divertenti andando avanti. Vale la pena notare che l'impostazione del servizio da eseguire come amministratore era un buon modo per eseguire il debug del problema (ovviamente una cosa a breve termine!) – SlimCheney

3

In alternativa, è possibile utilizzare "Gestione codice sorgente" - "Multiple SCM" per configurare manualmente tutti i sottomoduli e aggiungere "Comportamenti aggiuntivi" - "Verifica in una sottodirectory" per ognuno.

4

Sembra che essi hanno risolto con le versioni git client plug-in 1.20.0-beta1 e git plug-2.5.0-beta1. Tuttavia, possono essere aggiunti a Jenkins solo specificando di prelevare gli aggiornamenti dal centro di aggiornamento sperimentale.

+0

Ive aggiornato a git client plugin 1.21.0 e git plugin 2.5.3 ma non è cambiato nulla. Mi manca qualcosa? – dknaack

+0

Hai configurato correttamente la sezione "Comportamento dei moduli avanzati"? Controlla le istruzioni [in questo commento] (https://issues.jenkins-ci.org/browse/JENKINS-20941?focusedCommentId=263469#comment-263469) dal relativo tracker dei problemi. – danielfn

+0

Sì, l'ho fatto. Ive ora aggiornato per git client plugin 2.0.0-beta4 in questo ha risolto il mio problema. – dknaack

14

Sulla base delle risposte precedenti, ho ri-prioritizzato l'aggiornamento del Jenkins del mio cliente. Ora sono su Jenkins 2.41 con Git plugin 3.0.1 e prima della configurazione aggiuntiva questo non risolveva il problema. Ho trovato la configurazione di essere un po 'difficile:

  1. Aggiungi repository di livello superiore al codice sorgente Gestione -> Git
  2. selezionare l'opzione "Comportamenti aggiuntivi" pulsante Aggiungi
    • Selezionare "sotto-moduli avanzati comportamenti"
  3. ho provato con solo 'sottomoduli aggiornamento ricorsivamente' e ha ottenuto il 'permesso negato' errore (vedi in basso *)
  4. Tuttavia, ora selezionare entrambi "Ricorsivamente aggiornare sottomoduli" e "Usa credenziali da remoto predefinito di repository genitore" a Jenkins 2,41

Una volta che seleziono entrambe le opzioni, utilizza le credenziali che avevo configurate per il repository di primo livello e tutto funziona per me. Ecco ciò che il dialogo assomiglia a 2.41 con Git plug 3.0.1: git submodule authentication configuration under Jenkins 2.41

* Ecco l'essenza del mio "Autorizzazione negata" Errore:

Cloning into 'thirdparty'...

stderr: Permission denied (publickey). fatal: The remote end hung up unexpectedly Clone of 'ssh://[email protected]//thirdparty' into submodule path 'thirdparty' failed

PS Appena prima di pubblicare, ho fatto il mio Solitamente doppio controllo per essere sicuro di non duplicare una risposta. In questo caso, vedo che il commento di @ danielfn fa riferimento a qualcosa che è quasi identico alla mia risposta, ma 1. questo non mi ha aiutato e ho finito per capirlo per tentativi ed errori 2. e la politica di StackOverflow per pubblicare risposte qui piuttosto che fare riferimento a collegamenti esterni.

+1

Questo dovrebbe essere accettato come risposta, hai salvato le mie ore. –