Les sous-modules Git ne sont pas mis à jour dans la version 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 génération, 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 pousse 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?

    Notez que le plugin Jenkins Git 2.0 aura des “comportements de sous-modules avancés”, ce qui devrait assurer des mises à jour correctes des sous-modules:

    git 2.0

    Comme commenté par vikramvi :

    Advanced sub-modules behavior > ” Path of the reference repo to use during submodule update ” dans ce champ, ajoutez le sous-module git url.

    Chemin


    Owen B mentionne dans les commentaires :

    Pour le problème de l’authentification, il existe désormais une option “Utiliser les informations d’identification de la télécommande distante par défaut”

    Vu ici dans JENKINS-20941 :

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

    Savez-vous que votre repository 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 révision plus récente 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 faites comme ça, Jenkins vérifiera exactement la même révision du sous-module pendant la construction. Jenkins ne décide pas seule de la révision du sous-module à utiliser. C’est la différence fondamentale entre les sous-modules Git et les externes SVN.

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

    Ceci est couvert dans la documentation Git Plugin sur le site Jenkins sous la section: Sous- modules récursifs .

    extrait

    Le plug-in GIT prend en charge les référentiels avec des sous-modules qui ont eux-mêmes des sous-modules. Ceci doit cependant être activé: dans Configuration du travail -> Section Gestion du code source , Git -> Bouton Avancé (sous Branches à construire) -> Mise à jour récursive des sous-modules .

    Exemple

    Dans l’écran de configuration de votre travail, dans la section Gestion du code source, cliquez sur le bouton Ajouter pour sélectionner “Comportement des sous-modules avancés”.

    s1

    s2

    Puis sélectionnez “Mettre à jour récursivement les sous-modules”:

    s3

    Enfin trébuché sur un moyen de faire cela et c’est simple.

    Le problème:

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

    1. Clonage de sous-module avancé automatique: 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’écran entrer la description de l'image ici

    Il semble 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 

    Si vous utilisez le module Jenkins Git, vous pouvez le définir sur “Éliminer l’espace de travail avant la construction”, de cette manière, il obtiendra toujours le sous-module correct.