web-dev-qa-db-fra.com

Les sous-modules Git ne sont pas mis à jour dans la construction de Jenkins

J'ai un sous-module dans un projet à Jenkins. J'ai activé le paramètre avancé pour mettre à jour de manière récursive les sous-modules.

Lorsque je lance la construction, je constate que l'espace de travail contient les fichiers du sous-module. Le problème est que cela semble être la première révision du sous-module. Lorsque je modifie les modifications (référentiel hébergé sur GitHub), Jenkins ne semble pas mettre à jour le sous-module pour obtenir les modifications appropriées. Est-ce que quelqu'un a déjà vu ça?

69
Ben

On dirait que j'ai trouvé une solution:

J'ai ajouté une étape de construction pour exécuter les commandes Shell suivantes:

git submodule foreach git checkout master
git submodule foreach git pull
7
Ben

Notez que le Jenkins Git plugin 2. aura des "comportements de sous-module avancés", ce qui devrait assurer des mises à jour appropriées des sous-modules:

git 2.0

Comme commenté par vikramvi :

Advanced sub-modules behavior> "Path of the reference repo to use during submodule update "en regard de ce champ, ajoutez l’URL du sous-module Git.

Path


Owen B mentionne dans les commentaires :

Pour le problème d'authentification, il existe maintenant une option "Utiliser les informations d'identification du référentiel parent distant par défaut"

Vu ici à JENKINS-20941 :

https://issues.jenkins-ci.org/secure/attachment/33245/Screen%20Shot%202016-07-08%20at%2010.09.17.png

81
VonC

Savez-vous que votre référentiel Git fait toujours référence à une révision particulière d'un sous-module? Jenkins ne va pas changer automatiquement la révision.

Si vous souhaitez utiliser une nouvelle version du sous-module, vous devez le faire dans votre référentiel Git local:

cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git Push # Go and watch Jenkins build with the new revision of the submodule

Lorsque vous le ferez comme ceci, Jenkins vérifiera la même révision du sous-module lors de la construction. Jenkins ne décide pas à lui seul quelle révision du sous-module utiliser. C'est la différence fondamentale entre les sous-modules Git et les externes SVN.

Vous voudrez peut-être lire une bonne référence sur les sous-modules, par exemple. http://progit.org/book/ch6-6.html .

26
sti

Enfin, nous avons trébuché sur un moyen de le faire et c'est simple.

Le problème:

Le clone initial avec les informations d'identification fonctionne correctement, mais le clonage ultérieur de submodule échoue avec des informations d'identification incorrectes.

  1. Clonage automatique avancé de sous-modules: Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours: Entraîne une erreur d'identification.
  2. git submodule update --init Dans la section Execute Shell Échoue également avec une erreur d'identification.

La solution:

J'utilise jenkins-1.574.

  1. Cochez la case Build Environment >> SSH Agent.
  2. Sélectionnez les informations d'identification correctes (probablement les mêmes que celles sélectionnées dans la section Source Code Management
  3. Mettre à jour les sous-modules dans la section Execute Shell

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

Voici une capture d'écranenter image description here

17
potench

Si vous utilisez le module Jenkins Git, vous pouvez le définir sur "Effacer l'espace de travail avant la construction", ainsi le sous-module correct sera toujours obtenu.

5
Amin Y