web-dev-qa-db-fra.com

La mise à jour du sous-module Jenkins Git échoue

J'ai un dépôt git qui a un sous-module. Les deux appartiennent à une équipe sur BitBucket. Ma machine jenkins est un serveur Windows AWS avec le plugin git. J'utilise des clés SSH pour l'authentification. J'ai trois emplois jenkins. On clone le dépôt principal. C'est réussi. On clone le deuxième dépôt seul (le dépôt qui sera utilisé comme sous-module). C'est également un succès. Dans mon troisième travail de construction, je dis à jenkins de mettre à jour récursivement les sous-modules. Cela échoue et indique une erreur de clé publique. Comment cela peut-il être le cas si je peux cloner le référentiel seul?

Sortie console ci-dessous:

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
13
SlimCheney

Ce est était un bug connu de jenkins: https://issues.jenkins-ci.org/browse/JENKINS-20941 mais il a maintenant été corrigé, mettez à jour votre plugin Git pour résoudre le problème.

Si la mise à jour n'est pas possible, comme solution de contournement, vous pouvez mettre la clé dans le dossier .ssh de jenkins-users.

0
1615903

Sur la base des réponses précédentes, j'ai redéfini la priorité de la mise à niveau de Jenkins de mon client. Maintenant, ils sont sur Jenkins 2.41 avec le plugin Git 3.0.1 et avant la configuration supplémentaire, cela n'a pas résolu le problème. J'ai trouvé la configuration un peu délicate:

  1. Ajouter un référentiel de niveau supérieur à la gestion du code source -> Git
  2. Sélectionnez le bouton Ajouter "Comportements supplémentaires"
    • Sélectionnez "Comportements avancés des sous-modules"
  3. J'ai testé avec seulement "Mise à jour récursive des sous-modules" et j'ai obtenu l'erreur "Autorisation refusée" (voir en bas *)
  4. Cependant, je sélectionne maintenant à la fois "Mettre à jour les sous-modules de manière récursive" et "Utiliser les informations d'identification à distance par défaut du référentiel parent" dans Jenkins 2.41

Une fois que j'ai sélectionné les deux options, il utilise les informations d'identification que j'avais configurées pour le référentiel de niveau supérieur et tout fonctionne pour moi. Voici à quoi ressemble la boîte de dialogue en 2.41 avec le plugin Git 3.0.1: git submodule authentication configuration under Jenkins 2.41

* Voici l'essence de mon erreur "Autorisation refusée":

Clonage en `` tierce partie '' ...

stderr: Autorisation refusée (publickey). fatal: l'extrémité distante a raccroché de manière inattendue Le clonage de 'ssh: //[email protected]//thirdparty' dans le chemin de sous-module 'thirdparty' a échoué

PS Juste avant de poster, j'ai fait ma double vérification habituelle pour m'assurer de ne pas dupliquer une réponse. Dans ce cas, je vois que le commentaire de @ danielfn pointe vers quelque chose qui est presque identique à ma réponse, mais 1. cela ne m'a pas aidé et j'ai fini par le découvrir par essais et erreurs et 2. c'est la politique de StackOverflow à poster réponses ici plutôt que de faire référence à des liens externes.

25
sage

Il semble qu'ils l'aient corrigé avec les versions plugin client git 1.20.0-beta1 et plugin git 2.5.0-beta1. Cependant, ils ne peuvent être ajoutés à Jenkins qu'en spécifiant d'extraire les mises à jour du centre de mise à jour expérimental.

5
danielfn

Comme alternative, vous pouvez utiliser "Gestion du code source" - "Plusieurs SCM" pour configurer manuellement tous les sous-modules et ajouter "Comportements supplémentaires" - "Extraire dans un sous-répertoire" pour chacun.

5
Qi Luo