2017-07-04 1 views
0

J'essaie de faire fonctionner Jenkins sur un PC Windows et j'ai trouvé un problème étrange avec les sous-modules. Je possède un repo git avec trois sous-modules. Après un moment, il semble que Git travaille sur Jenkins, donc un clone normal fonctionne. Cependant, le clone ne clone pas les sous-modules à l'intérieur du repo principal, j'ai donc coché la case pour mettre à jour récursivement les sous-modules.Problème avec les sous-modules Jenkins et Git

enter image description here

Cependant, quand je lance mon travail:

Started by user <User> 
Building in workspace X:\Jenkins\<JobName> 
- C:/Program Files/Git/bin/git.exe rev-parse --is-inside-work-tree # timeout=10 
Fetching changes from the remote Git repository 
- C:/Program Files/Git/bin/git.exe config remote.origin.url ssh://[email protected]<server>/<repo>.git # timeout=10 
Fetching upstream changes from ssh://[email protected]<server>/<repo>.git 
- C:/Program Files/Git/bin/git.exe --version # timeout=10 
using GIT_SSH to set credentials 
- C:/Program Files/Git/bin/git.exe fetch --tags --progress ssh://[email protected]<server>/<repo>.git +refs/heads/*:refs/remotes/origin/* 
- C:/Program Files/Git/bin/git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10 
- C:/Program Files/Git/bin/git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10 
Checking out Revision b13204ee1c6717a82d1c7a17922f2a477efd119d (refs/remotes/origin/master) 
Commit message: "testinggg.." 
- C:/Program Files/Git/bin/git.exe config core.sparsecheckout # timeout=10 
- C:/Program Files/Git/bin/git.exe checkout -f b13204ee1c6717a82d1c7a17922f2a477efd119d 
- C:/Program Files/Git/bin/git.exe rev-list b13204ee1c6717a82d1c7a17922f2a477efd119d # timeout=10 
- C:/Program Files/Git/bin/git.exe remote # timeout=10 
- C:/Program Files/Git/bin/git.exe submodule init # timeout=10 
- C:/Program Files/Git/bin/git.exe submodule synC# timeout=10 
- C:/Program Files/Git/bin/git.exe config --get remote.origin.url # timeout=10 
- C:/Program Files/Git/bin/git.exe submodule init # timeout=10 
- C:/Program Files/Git/bin/git.exe config -f .gitmodules --get-regexp ^submodule\.(.*)\.url # timeout=10 
- C:/Program Files/Git/bin/git.exe config --get submodule.top.url # timeout=10 
- C:/Program Files/Git/bin/git.exe remote # timeout=10 
- C:/Program Files/Git/bin/git.exe config --get remote.origin.url # timeout=10 
- C:/Program Files/Git/bin/git.exe config -f .gitmodules --get submodule.top.path # timeout=10 
using GIT_SSH to set credentials 
- C:/Program Files/Git/bin/git.exe submodule update --init --recursive top 
FATAL: Command "C:/Program Files/Git/bin/git.exe submodule update --init --recursive top" returned status code 1: 
stdout: 
stderr: fatal: Needed a single revision 
Unable to find current revision in submodule path 'top' 

hudson.plugins.git.GitException: Command "C:/Program Files/Git/bin/git.exe submodule update --init --recursive top" returned status code 1: 
stdout: 
stderr: fatal: Needed a single revision 
Unable to find current revision in submodule path 'top' 

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1903) 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1622) 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:71) 
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$7.execute(CliGitAPIImpl.java:1076) 
    at hudson.plugins.git.extensions.impl.SubmoduleOption.onCheckoutCompleted(SubmoduleOption.java:102) 
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1182) 
    at hudson.scm.SCM.checkout(SCM.java:495) 
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1276) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:560) 
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:485) 
    at hudson.model.Run.execute(Run.java:1735) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:97) 
    at hudson.model.Executor.run(Executor.java:405) 
Finished: FAILURE 

Qu'est-Git quand il dit:

avait besoin d'une seule révision Impossible de trouver la révision en cours dans le chemin de sous-module 'top'

J'ai regardé autour et n'a rien trouvé :(

J'ai répliqué cette séquence de commande sur un shell normal et aucune erreur n'est apparue.

Toute aide sera appréciée. Merci!

Répondre

0

Apparemment, 'top' est l'un de vos sous-modules. Le référentiel principal qui contient des sous-modules stocke simplement un ID de validation de chacun des sous-modules comme référence. J'interprète le message d'erreur comme s'il y avait un ID de commit pour 'top' dans le repo principal qui ne peut pas être trouvé (n'existe pas?) Dans 'top'. Je vérifierais cela pour être sûr de ça.

Dans le dernier projet, je travaillais avec Git et Jenkins nous sous-modules n'a pas utilisé le de plugin Git avancée des comportements sous-modules mais exécuté toutes les commandes git submodule ... dans un Constructeur: Exécuter shell étape du Conditional BuildStep Plugin . Conditionnel pour pouvoir annuler la construction si quelque chose se passe mal pendant ces commandes Git.

+0

Je ne sais pas ce que vous entendez par "ID". En effet "top" est le chemin où va l'un de mes sous-modules. Mon fichier gitmodules répertorie uniquement les URL de repo, leur branche et leur chemin, pas d'informations de validation incluses. Est-ce normal? – viterbi

+0

@viterbi Par "ID", j'entends le hash de 20 octets assigné à chaque commit. Oui, [c'est normal] (https://www.git-scm.com/docs/gitmodules) mais je ne parlais pas de ça. Voir [git-submodule] (https://www.git-scm.com/docs/git-submodule): "Les _Submodules sont composés à partir d'une entrée d'arbre gitlink dans le référentiel principal qui fait référence à un objet de commit particulier dans le référentiel interne qui est complètement séparé Un enregistrement dans le fichier .gitmodules (...) à la racine de l'arborescence source attribue un nom logique au sous-module et décrit l'URL par défaut à partir de laquelle le sous-module doit être cloné._ " –

+0

I ne sais vraiment pas ce que je fais mal. Si je clone le repo avec les sous-modules récursivement je n'ai pas de problème, quand jenkins le fait, le message "Needed single revision" apparaît ... Je veux vraiment éviter de le faire manuellement, si jenkins est suposé pour pouvoir gérer beaucoup Je préfère le faire ... – viterbi

1

Pour toute personne rencontrant des problèmes similaires, cochez la case pour que Jenkins efface l'espace de travail local et force le clonage du référentiel une fois. Cela a fonctionné pour moi;)