Plugin Jenkins Git détaché HEAD

Je suis nouveau à Git et aussi à Jenkins. Mon problème est que je ne peux pas faire fonctionner le plugin de la version Jenkins Maven.

Lorsque je construis une version commune de Maven avec Jenkins, cela fonctionne bien, mais lorsque j’essaie de réaliser une version avec le plug-in de la version Maven, j’obtiens la trace de stack suivante:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project parent: An error is occurred in the checkin process: Exception while executing SCM command. at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239) at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158) at hudson.maven.Maven3Builder.call(Maven3Builder.java:98) at hudson.maven.Maven3Builder.call(Maven3Builder.java:64) at hudson.remoting.UserRequest.perform(UserRequest.java:118) at hudson.remoting.UserRequest.perform(UserRequest.java:48) at hudson.remoting.Request$2.run(Request.java:326) at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: org.apache.maven.plugin.MojoExecutionException: An error is occurred in the checkin process: Exception while executing SCM command. at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:295) at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:247) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 27 more Caused by: org.apache.maven.shared.release.ReleaseExecutionException: An error is occurred in the checkin process: Exception while executing SCM command. at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:160) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:145) at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:76) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:78) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146) at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107) at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:291) ... 30 more Caused by: org.apache.maven.scm.ScmException: Exception while executing SCM command. at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:63) at org.apache.maven.scm.provider.git.AbstractGitScmProvider.executeCommand(AbstractGitScmProvider.java:291) at org.apache.maven.scm.provider.git.AbstractGitScmProvider.checkin(AbstractGitScmProvider.java:217) at org.apache.maven.scm.provider.AbstractScmProvider.checkIn(AbstractScmProvider.java:410) at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:156) ... 38 more Caused by: org.apache.maven.scm.ScmException: Detecting the current branch failed: fatal: ref HEAD is not a symbolic ref at org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand.getCurrentBranch(GitBranchCommand.java:147) at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.createPushCommandLine(GitCheckInCommand.java:192) at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.executeCheckInCommand(GitCheckInCommand.java:132) at org.apache.maven.scm.command.checkin.AbstractCheckInCommand.executeCommand(AbstractCheckInCommand.java:54) at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59) ... 42 more channel stopped Finished: FAILURE 

Le message d’erreur et la commande défaillante sont les suivants:

 [INFO] Executing: /bin/sh -c cd /var/lib/jenkins/workspace/test_maven/parent && git symbolic-ref HEAD [INFO] Working directory: /var/lib/jenkins/workspace/test_maven/parent mojoFailed org.apache.maven.plugins:maven-release-plugin:2.3.2(default-cli) projectFailed ch.apkern.achilles:parent:1.0-SNAPSHOT sessionEnded 

J’ai compris que le plugin Jenkins Git crée une référence HEAD détachée “(no branch)” qui pose problème, je pense. Mais je ne sais absolument pas pourquoi cette référence est créée ou comment je peux résoudre ce problème.

Je vous serais reconnaissant pour toute l’aide apscope.

Aucune des configurations Jenkins de l’autre réponse n’a fonctionné pour moi sans avoir à créer des étapes manuelles. Ce qui fonctionne vraiment est simple:

 Repository URL:  Branches to build: master Checkout/merge to local branch (optional): master 

Le champ Checkout/merge to local branch (optional) est parti dans la version actuelle (2.2.1) du plug-in Git.

Il semble être passé à des Additional Behaviours -> Check out to specific local branch :

entrer la description de l'image ici

En définissant cette valeur sur master je me suis retrouvé avec une twig plutôt qu’une tête détachée.

MISE À JOUR (novembre 2015): Veuillez noter que cette solution a été donnée pour une version spécifique du plug-in Git (1.1.26). Dans les versions ultérieures, le plug-in a été mis à jour pour faciliter la configuration.

Pour Jenkins GIT version du plug-in 1.1.26, essayez ceci:

Accédez à Configuration du travail. Faites défiler jusqu’à la section Git et cliquez sur le bouton “Avancé …” sous “Référentiels”. Ensuite, réglez:

 Name: origin Refspec: +refs/heads/branch-0.1:refs/remotes/origin/localbranchname 

Puis cliquez sur un autre bouton “Avancé …” et définissez:

 Checkout/merge to local branch (optional): localbranchname 

Vous pouvez nommer une twig locale comme vous le souhaitez, mais la destination dans Refspec doit correspondre au nom de la twig locale dans ce champ facultatif (dans ce cas, “localbranchname”). Cela va attacher HEAD à localbranchname comme ceci:

 HEAD -> refs/heads/localbranchname -> 7a698457751bdc043cfda631b81e3812c5361790 

Maven Release devrait maintenant passer dans Jenkins. Btw, cela fonctionne pour moi avec Jenkins 1.492 et Jenkins GIT version 1.1.26.

dans Git Quand une twig est extraite, comme master ou dev ou toute autre twig locale, votre HEAD (fichier dans le dossier .git) contiendra une référence à la twig correspondante. Par conséquent, il est “attaché”.

Lorsque vous effectuez des opérations telles que rebase, fusionner ou extraire un commit particulier. Autrement dit, chaque fois que vous voyez “pas de twig”, votre HEAD ne fait référence à aucune twig locale mais pointe directement vers la validation, c’est-à-dire qu’il contient le SHA-1. Cela signifie qu’il est détaché de toute twig. Il n’y a pas de nouvelle référence “aucune twig” créée.

La commande git symbolic-ref HEAD vérifie si le contenu HEAD est une référence ou un SHA-1 et l’imprime.

Vous pouvez le voir en faisant:

 git checkout master git symbolic-ref HEAD git checkout HEAD~2 # going two commits back git symbolic-ref HEAD git checkout master # coming back 

Maintenant, la plupart du temps, le plugin git de Jenkins fonctionne avec le code dans l’état HEAD détaché. Je ne suis pas sûr de savoir comment fonctionne le plug-in de la version Maven, mais je suis sûr à 99% que cela nécessite que vous publiiez depuis une twig spécifique. Pour corriger cela, je vous recommande de spécifier en tant que étape de pré-construction ou commande de shell quelque chose comme ça:

 git checkout master; git pull origin master 

Cela va résoudre le problème, j’espère;)

Je veux construire plusieurs succursales et vérifier chaque twig sous son nom. J’utilise le plugin GIT 2.4.0.

La réponse de Matthias Braun vous donne une twig nommée, mais elle ne porte pas le nom de la twig distante.

Au lieu de définir le master twig locale, définissez la twig locale $GIT_BRANCH .

J’ai trouvé cette solution dans https://issues.jenkins-ci.org/browse/JENKINS-6856

J’ai le même problème. La solution @Eugene n’a fonctionné qu’une seule fois. Il y avait une erreur lors de la deuxième tentative – “ne peut pas supprimer HEAD du repository” ou quelque chose comme ça.

J’ai fondé ceci ( source ):

Et m2 étapes supplémentaires (pré-construction)

git checkout master || git checkout -b master

git reset – origine / maître d’origine

Et maintenant je pense que ça va.

J’ai eu le même problème. J’ai essayé la solution de Constantine, qui a parfaitement fonctionné, mais le tag et les commits ont été placés sur le repository distant “localbranchname”.

J’ai donc fait la même chose mais manuellement: ajoutez d’abord un script shell pré-étapes:

 git branch -f localJenkins git checkout localJenkins 

Ensuite, un script shell post-étapes:

 git checkout master git rebase localJenkins git branch -D localJenkins git push origin master git push --tag 

Cela marche ! De cette façon, vous n’avez pas de twig distante jenkins, les commits et les balises seront sur la twig maître (ou autre).

J’espère que cela t’aides !

Ajouter à la ligne de commande maven pour la version préparée: -DpushChanges=false -DlocalCheckout=true

Cela signifie que Maven utilisera ce que jenkins a trouvé dans le répertoire de travail .git , et ne clone pas la télécommande ni ne pousse à distance.

Je recommande de configurer des refs/remotes/origin/develop pleinement qualifiés comme votre “twig à construire” Git. De cette façon, cela me semble plus compréhensible.

Dans un tel cas, votre $ GIT_BRANCH serait magiquement défini par Jenkins sur origin/develop

Ensuite, au lieu d’utiliser trop compliqué (mais portable) GitPublisher, ajoutez simplement une étape de post-construction “Execute Shell”:

 echo Remote branch is $GIT_BRANCH, replacing origin with refs/heads. git push --follow-tags "$GIT_URL" "+HEAD:${GIT_BRANCH/#origin\//refs/heads/}" 

Cela pousse tout ce que Maven a changé, comme pom.xml et les tags.

(RESOLU)

Bonjour, j’ai eu le même problème avec maven-release-plugin: 2.5.3 et maven-scm-provider-jgit: 1.9.5.

Je voulais être en mesure de sélectionner la twig pour la “build de sortie paramétrée”, cela ne fonctionnait pas et quand j’ai choisi “Checkout / merge to local branch (optionnel)” en télécommande (origine répétée).

Alors:

  • Ajouter “Paramètre Git” à “Ce projet est paramétré”
    Nom: twig
    ParameterType: Branch
    Cliquez sur Avancé:
    Filtre de twig: origine /(.*)
    (c’était le truc!)

  • Git Repository:
    Branches à construire: refs / remotes / origin / $ {branch}

  • Comportements supplémentaires: -> Départ vers une succursale locale spécifique
    Nom de la succursale: $ {twig}

S’amuser 🙂

(RESOLU)

Bonjour, j’ai eu le même problème en essayant de faire une version paramétrée à partir d’une twig avec maven-release-plugin: 2.5.3 et maven-scm-provider-jgit: 1.9.5.

Je voulais être en mesure de sélectionner la twig pour la “build de sortie paramétrée”, cela ne fonctionnait pas et quand j’ai choisi “Checkout / merge to local branch (optionnel)” en télécommande (origine répétée).

Alors:

  • Ajouter “Paramètre Git” à “Ce projet est paramétré”
    Nom: twig
    ParameterType: Branch
    Cliquez sur Avancé:
    Filtre de twig: origine /(.*)
    (c’était le truc!)

  • Git Repository:
    Branches à construire: refs / remotes / origin / $ {branch}

  • Comportements supplémentaires: -> Départ vers une succursale locale spécifique
    Nom de la succursale: $ {twig}

S’amuser 🙂