Problema con los submodules de Jenkins y Git

Intento que Jenkins trabaje en una PC con Windows y he encontrado un problema extraño con los submodules.

Tengo un repository git con tres submodules. Después de un time, parece que conseguí que Git trabajara en Jenkins para que funcione un clon normal. Sin embargo, el clon no clona los submodules dentro del repository principal, por lo que he marcado el recuadro para actualizar recursivamente los submodules.

enter image description here

Sin embargo, cuando ejecuto mi trabajo:

Started by user <User> Building in workspace X:\Jenkins\<JobName> - C:/Program Files/Git/bin/git.exe rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository - C:/Program Files/Git/bin/git.exe config remote.origin.url ssh://git@<server>/<repo>.git # timeout=10 Fetching upstream changes from ssh://git@<server>/<repo>.git - C:/Program Files/Git/bin/git.exe --version # timeout=10 using GIT_SSH to set cnetworkingentials - C:/Program Files/Git/bin/git.exe fetch --tags --progress ssh://git@<server>/<repo>.git +refs/heads/*:refs/remotes/origin/* - C:/Program Files/Git/bin/git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10 - C:/Program Files/Git/bin/git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10 Checking out Revision b13204ee1c6717a82d1c7a17922f2a477efd119d (refs/remotes/origin/master) Commit message: "testinggg.." - C:/Program Files/Git/bin/git.exe config core.sparsecheckout # timeout=10 - C:/Program Files/Git/bin/git.exe checkout -f b13204ee1c6717a82d1c7a17922f2a477efd119d - C:/Program Files/Git/bin/git.exe rev-list b13204ee1c6717a82d1c7a17922f2a477efd119d # timeout=10 - C:/Program Files/Git/bin/git.exe remote # timeout=10 - C:/Program Files/Git/bin/git.exe submodule init # timeout=10 - C:/Program Files/Git/bin/git.exe submodule sync # timeout=10 - C:/Program Files/Git/bin/git.exe config --get remote.origin.url # timeout=10 - C:/Program Files/Git/bin/git.exe submodule init # timeout=10 - C:/Program Files/Git/bin/git.exe config -f .gitmodules --get-regexp ^submodule\.(.*)\.url # timeout=10 - C:/Program Files/Git/bin/git.exe config --get submodule.top.url # timeout=10 - C:/Program Files/Git/bin/git.exe remote # timeout=10 - C:/Program Files/Git/bin/git.exe config --get remote.origin.url # timeout=10 - C:/Program Files/Git/bin/git.exe config -f .gitmodules --get submodule.top.path # timeout=10 using GIT_SSH to set cnetworkingentials - C:/Program Files/Git/bin/git.exe submodule update --init --recursive top FATAL: Command "C:/Program Files/Git/bin/git.exe submodule update --init --recursive top" returned status code 1: stdout: stderr: fatal: Needed a single revision Unable to find current revision in submodule path 'top' hudson.plugins.git.GitException: Command "C:/Program Files/Git/bin/git.exe submodule update --init --recursive top" returned status code 1: stdout: stderr: fatal: Needed a single revision Unable to find current revision in submodule path 'top' at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1903) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCnetworkingentials(CliGitAPIImpl.java:1622) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:71) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$7.execute(CliGitAPIImpl.java:1076) at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:102) at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1182) at hudson.scm.SCM.checkout(SCM.java:495) at hudson.model.AbstractProject.checkout(AbstractProject.java:1276) at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:560) at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:485) at hudson.model.Run.execute(Run.java:1735) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:405) Finished: FAILURE 

¿Qué quiere decir Git cuando dice:

Se necesitaba una única revisión No se puede encontrar la revisión actual en la ruta del submodule 'superior'

He mirado alnetworkingedor y no he encontrado nada 🙁

He replicado esta secuencia de command en un shell normal y no apareció ningún error.

Cualquier ayuda será apreciada. ¡Gracias!

Para cualquier persona que tenga problemas similares, marque la casilla para que Jenkins borre el espacio de trabajo local y fuerce la copy del repository una vez. Eso funcionó para mí;)

Aparentemente, 'top' es uno de tus submodules. El repository principal que contiene submodules simplemente almacena un ID de confirmación de cada uno de los submodules como reference para ellos. Interpreto el post de error como si hubiera un ID de confirmación para 'top' en el repository principal que no se puede encontrar (¿no existe?) En 'top'. Verificaría esto para estar seguro de esto.

En el último proyecto trabajé con submodules de Git y Jenkins no usamos los comportamientos de submodules avanzados de Git plugin, pero ejecutamos todos los commands del git submodule ... en un Builder: ejecutar el paso de shell del complemento Conditional BuildStep . Condicional para poder abortar la compilation si algo sale mal durante estos commands de Git.