¿Cómo rastrear una falla de Jenkins al verificar el submodule de git sobre ssh?

Estoy usando Bitbucket y Jenkins para hacer mis comstackciones. Mi proyecto tiene un submodule que debe ser revisado durante el process de compilation. El repository git de nivel superior que estoy usando funciona bien. Saca eso de bitbucket usando keys de implementación con acceso SSH sin problema. Tengo la misma key de implementación en ambos repositorys. También hice mi submodule definido relativamente a mi proyecto:

[submodule "platform/web-app/WEB-INF/learning"] path = platform/web-app/WEB-INF/learning url = ./../xxxxxxxx.git 

Sin embargo, cuando Jenkins construye el proyecto, baja el repository de nivel superior y falla durante el submodule. Jenkins está construyendo esto usando el plugin EC2 por lo que está construido en un esclavo que se inicia a demanda. Intenté ejecutar git manualmente en la caja, pero falla de la misma manera. No entiendo completamente cómo se empuja la key ssh en la caja, pero no entiendo cómo depurar esto. ¿Por qué funciona esto para un module, pero falla para el submodule?

Aquí está el resultado:

 FATAL: Command "git submodule update --init --recursive" returned status code 1: stdout: Cloning into 'platform/web-app/WEB-INF/learning'... stderr: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Clone of 'git@bitbucket.org:xxxxxxxx/xxxxxxx.git' into submodule path 'platform/web-app/WEB-INF/learning' failed hudson.plugins.git.GitException: Command "git submodule update --init --recursive" returned status code 1: stdout: Cloning into 'platform/web-app/WEB-INF/learning'... stderr: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Clone of 'git@bitbucket.org:xxxxxxxx/xxxxxx.git' into submodule path 'platform/web-app/WEB-INF/learning' failed at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1148) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1125) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1121) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:937) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.submoduleUpdate(CliGitAPIImpl.java:598) at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.submoduleUpdate(CliGitAPIImpl.java:579) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:299) at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:280) at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:239) at hudson.remoting.UserRequest.perform(UserRequest.java:118) at hudson.remoting.UserRequest.perform(UserRequest.java:48) at hudson.remoting.Request$2.run(Request.java:328) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) 

Creo que estás encontrando el problema informado aquí: https://issues.jenkins-ci.org/browse/JENKINS-20941

A partir de los síntomas que estoy viendo, las cnetworkingenciales que ingresas en Jenkins se utilizan para verificar el repository de nivel superior, pero no se usan cuando se intentan get las actualizaciones del submodule.

Hay dos angularjs para una solución:

  • Coloque los files de key en todos sus esclavos de compilation
  • Actualice sus configuraciones de trabajo para actualizar explícitamente

O simplemente puede esperar a que los mantenedores lo arreglen, o arreglarlo usted mismo 🙂

Espero que esto ayude

Estoy usando ssh-agent con una cnetworkingencial específica en la configuration del trabajo. Luego, en el paso de creación, tengo el componente "Exec shell" con:

 git submodule init git submodule sync git submodule update --init --recursive