TeamCity – "No hay input para esta ruta en la configuration de .gitmodules"

Siempre se repite un error que impide que las comstackciones en TeamCity se completen satisfactoriamente. Parece que no se actualizó el repo de Git a la última versión.

Aquí está el post de error: (Lo he formateado para que sea más fácil de leer)

[Updating sources] Failed to build patch for build #119 {build id=620}, VCS root: "MyApp Git" { instance id=1, parent internal id=1, parent id=MYAPP_GIT, description: "http://build-pc:1234/scm/MYAPP/myapp.git#refs/heads/master" }, due to error: Patch building failed: jetbrains.buildServer.buildTriggers.vcs.git .submodules.MissingSubmoduleEntryException: The repository 'http://teamcity@build-pc:1234/scm/MYAPP/myapp.git' has a submodule in the commit '5bb7870d294c719f61261f94510343abff65b789' at a path 'MyApp/Submodules/MySubmodule', but has no entry for this path in .gitmodules configuration 

En el momento en que este error comenzó a ocurrir, miré dentro del file .gitmodules dentro del repository local del agente de compilation de TeamCity. De hecho, estaba allí:

 [submodule "MyApp/Submodules/MySubmodule"] path = MyApp/Submodules/MySubmodule url = http://build-pc:1234/scm/MYSUB/mysub.git 

Detalles que pueden ayudar a diagnosticar este problema:

  • En el momento en que se estaba creando este submodule, recuerdo que hubo algunas complicaciones que finalmente se solucionaron. Lo más que recuerdo es que el submodule tuvo que crearse varias veces debido a que se ingresaron la URL y la ruta incorrectas. No obstante, el submodule "funciona" ahora, less este problema con TeamCity.
  • Se han agregado otros submodules a nuestro proyecto, ninguno de los cuales tiene este problema.

Aquí está el logging de compilation actual

 [17:58:04]Checking for changes [17:58:05]Will perform clean checkout [17:58:05]Clean checkout reasons [17:58:05]Agent doesn't have any version of the project sources [17:58:05]Checkout directory is empty or doesn't exist [17:58:05]Publishing internal artifacts [17:58:05]Sending using ArtifactsCachePublisher [17:58:05]Sending using WebPublisher [17:58:05]Clearing temporary directory: C:\TeamCity\buildAgent\temp\buildTmp [17:58:05]Using vcs information from server. Reason: no revision information for buildtype Full Build and checkout directory C:\TeamCity\buildAgent\work\MyApp_Checkout on agent [17:58:05]Clean build enabled: removing old files from C:\TeamCity\buildAgent\work\MyApp_Checkout [17:58:05]Checkout directory: C:\TeamCity\buildAgent\work\MyApp_Checkout [17:58:05]Updating sources: server side checkout (6m:36s) [17:58:06]Building and caching clean patch for VCS root: MyApp Git [18:04:42]Failed to build patch for build #122 {build id=623}, VCS root: "MyApp Git" {instance id=1, parent internal id=1, parent id=MYAPP_GIT, description: "http://build-pc:1234/scm/MYAPP/myapp.git#refs/heads/master"}, due to error: Patch building failed: jetbrains.buildServer.buildTriggers.vcs.git.submodules.MissingSubmoduleEntryException: The repository 'http://[email protected]:1234/scm/MYAPP/myapp.git' has a submodule in the commit '8e88b0760de96739bef3d77e8e99303a1d0c8296' at a path 'MyApp/Submodules/MySubmodule', but has no entry for this path in .gitmodules configuration [18:04:42]Repository sources transfernetworking [18:04:42]Will repeat attempt when server will be available, number of attempts left: 2 [18:04:52]Updating sources: server side checkout (running for 4m:24s) [18:04:52][Updating sources] Will perform clean checkout [18:04:52][Updating sources] Clean checkout reasons [18:04:52]Agent doesn't have any version of the project sources [18:04:52]Checkout directory is empty or doesn't exist [18:04:53][Updating sources] Building and caching clean patch for VCS root: MyApp Git 

En mi caso, no fue la discrepancia del protocolo. El problema era que no había una nueva línea después de la última línea en .gitmodules. Eso estuvo bien con git / SourceTree, pero a Team City no le gustó. La solución fue agregar una línea vacía adicional al final del file.

Acabo de toparme con este problema: la raíz de todo el problema era que tenía el repository principal (y la authentication) configurados para SSH y el submodule estaba referencedo con la ruta HTTPS.

Entonces, lo que tenía que hacer era eliminar el submodule y luego agregarlo de nuevo usando la ruta SSH en lugar de HTTPS (simplemente cambiar la ruta en .gitmodules no funciona, ya que el origen en el submodule también count).