Sous-modules Git non mis à jour dans la compilation de Jenkins

j'ai un sous-module dans un projet à Jenkins. J'ai activé le réglage avancé pour mettre à jour récursivement les sous-modules.

quand j'exécute la compilation, je vois que l'espace de travail contient les fichiers du sous-module. Le problème est qu'il semble s'agir de la première révision du sous-module. Quand je pousse les modifications (dépôt hébergé sur GitHub) Jenkins ne semble pas mettre à jour le sous-module pour obtenir les bonnes modifications. Quelqu'un a déjà vu cela?

60
demandé sur Peter Mortensen 2012-03-31 09:33:59

6 réponses

notez que le Jenkins Git plugin 2.0 aura "advance submodule behaviors", qui devrait assurer des mises à jour appropriées des sous-modules:

git 2.0

Comme , a commenté par vikramvi :

Advanced sub-modules behavior > " Path of the reference repo to use during submodule update " contre ce champ, Ajouter submodule git url.

Path


Owen B mentionne dans les commentaires :

pour la question d'authentification, il y a maintenant une option "Utiliser les justificatifs d'identité à partir de la télécommande par défaut du dépôt parent

vu ici dans JENKINS-20941 :

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

66
répondu VonC 2018-06-26 19:41:12

êtes-vous conscient que votre dépôt 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 voulez utiliser une nouvelle révision du sous-module, vous devez le faire dans votre dépôt 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

quand vous le faites comme ceci, Jenkins vérifiera la révision exacte du sous-module pendant la construction. Jenkins does ce n'est pas à lui seul de décider quelle révision du sous-module utiliser. C'est la différence fondamentale entre les sous-modules Git et SVN externes.

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

25
répondu sti 2018-08-12 07:46:17

C'est couvert dans la documentation du Plugin Git sur le site de Jenkins sous la rubrique: submodules récursifs .

extrait

le plugin git prend en charge les dépôts avec des sous-modules qui, à leur tour, ont eux-mêmes des sous-modules. Ceci doit être activé cependant: dans configuration du travail - > Section gestion du code Source , Git - > bouton Avancé (sous Branches à construire) - > mise à jour récursive sous-modules .

exemple

à partir de l'écran de configuration de votre travail, dans la section Gestion du Code Source, cliquez sur le bouton pour sélectionner" comportement des sous-modules avancés".

s1

                                  s2

puis sélectionnez" sous-modules de mise à jour récursive":

s3

23
répondu slm 2014-11-14 20:14:39

est finalement tombé sur une façon de faire ceci et c'est simple.

La Question:

le clone initial avec des références fonctionne très bien mais le clone subséquent submodule ne réussit pas le clonage avec des références incorrectes.

  1. Clonage automatique de sous-modules avancés: Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours : entraîne une erreur de justificatif.
  2. git submodule update --init dans la section Execute Shell échoue également avec une erreur de vérification des références.

La Solution:

j'utilise jenkins-1.574 .

  1. cochez la case Build Environment >> SSH Agent .
  2. sélectionnez les bonnes références (probablement les mêmes que celles sélectionnées dans Source Code Management section
  3. mise à Jour submodules dans le Execute Shell de la section

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

Voici une capture d'écran enter image description here

17
répondu potench 2015-05-21 08:59:04

on dirait que j'ai trouvé une solution:

j'ai ajouté une étape de compilation pour exécuter les commandes shell suivantes:

git submodule foreach git checkout master
git submodule foreach git pull
6
répondu Ben 2018-08-12 07:25:33

si vous utilisez le module Jenkins Git, vous pouvez le configurer pour" effacer l'espace de travail avant de construire", de cette façon il obtiendra toujours le bon sous-module.

5
répondu Amin Y 2013-01-25 17:54:37