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?
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:
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.
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 :
ê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 .
C'est couvert dans la documentation du Plugin Git sur le site de Jenkins sous la rubrique: submodules récursifs .
extraitle 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".
puis sélectionnez" sous-modules de mise à jour récursive":
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.
- Clonage automatique de sous-modules avancés:
Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours
: entraîne une erreur de justificatif. -
git submodule update --init
dans la sectionExecute Shell
échoue également avec une erreur de vérification des références.
La Solution:
j'utilise jenkins-1.574
.
- cochez la case
Build Environment >> SSH Agent
. - sélectionnez les bonnes références (probablement les mêmes que celles sélectionnées dans
Source Code Management
section -
mise à Jour submodules dans le
Execute Shell
de la sectiongit submodule sync git submodule update --init --recursive
Voici une capture d'écran
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
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.