it-swarm.com.de

Jenkins Git Plugin wurde getrennt HEAD

Ich bin neu bei Git und auch bei Jenkins. Mein Problem ist, dass ich das Jenkins Maven Release Plugin nicht zum Laufen bringen kann.

Wenn ich ein gemeinsames Maven-Build mit Jenkins baue, funktioniert es gut, aber wenn ich versuche, eine Version mit dem Maven-Release-Plugin auszuführen, erhalte ich die folgende Stapelverfolgung:

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

Der fehlgeschlagene Befehl und die Fehlermeldung lauten:

[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

Ich habe herausgefunden, dass das Jenkins Git-Plugin einen separaten HEAD ref "(kein Zweig)" erstellt, der das Problem verursacht, denke ich. Ich habe jedoch keine Ahnung, warum dieser Ref erstellt wird oder wie ich dieses Problem lösen kann.

Ich wäre für jede Hilfe dankbar.

57
Michel Werren

Keine der Jenkins-Konfigurationen der anderen Antwort funktionierte für mich, ohne manuelle Schritte erstellen zu müssen. Was tatsächlich funktioniert, ist einfach:

Repository URL: <repo>
Branches to build: master
Checkout/merge to local branch (optional): master
59
Juraj Misur

Das Checkout/merge to local branch (optional)-Feld ist in der aktuellen (2.2.1) -Version des Git-Plugins nicht mehr vorhanden.

Es scheint zu Additional Behaviours -> Check out to specific local branch umgezogen zu sein:

enter image description here

Wenn Sie diesen Wert auf master setzen, wurde ein ausgecheckter Zweig anstelle eines abgelösten Kopfes angezeigt.

56
Matthias Braun

UPDATE (November 2015): Bitte beachten Sie, dass diese Lösung für eine bestimmte Version des Git-Plugins (1.1.26) angegeben wurde. In späteren Versionen wurde das Plugin aktualisiert, um die Konfiguration zu erleichtern.

Für Jenkins GIT-Plugin Version 1.1.26 versuchen Sie Folgendes:

Gehen Sie zur Jobkonfiguration. Scrollen Sie nach unten zum Git-Bereich und klicken Sie unter "Repositories" auf die Schaltfläche "Advanced". Dann setze:

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

Klicken Sie dann auf eine weitere Schaltfläche "Erweitert ..." und legen Sie Folgendes fest:

Checkout/merge to local branch (optional): localbranchname

Sie können den lokalen Zweig nach Belieben benennen, das Ziel in Refspec muss jedoch mit dem Namen des lokalen Zweigs in diesem optionalen Feld übereinstimmen (in diesem Fall "localbranchname"). Dadurch wird HEAD an localbranchname wie folgt angehängt:

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

Maven Release sollte jetzt in Jenkins . Passen. Übrigens, das funktioniert für mich mit Jenkins 1.492 und Jenkins GIT Plugin Version 1.1.26. 

24
Constantine

wenn Sie einen Zweig ausgecheckt haben, z. B. master oder dev oder einen anderen lokalen Zweig, enthält Ihr HEAD (Datei im .git-Ordner) einen Verweis auf den entsprechenden Zweig. Deshalb ist es "angehängt".

Wenn Sie einige Vorgänge ausführen, wie z. B. Rebase, Zusammenführen oder Auschecken eines bestimmten Commits. jedes Mal, wenn Sie "keine Verzweigung" sehen, hat Ihr HEAD keinen Verweis auf eine lokale Verzweigung, sondern verweist direkt auf das Festschreiben, d. h. Das heißt, es ist losgelöst - getrennt von jedem Zweig. Es wird keine neue Referenz "kein Zweig" erstellt.

Der Befehl git symbolic-ref HEAD prüft, ob der Inhalt von HEAD eine Referenz oder ein SHA-1 ist, und druckt ihn aus.

Sie können das sehen, indem Sie:

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

In den meisten Fällen arbeitet git plugin in Jenkins mit dem Code im freistehenden Zustand HEAD. Ich bin nicht sicher, wie das Release-Plugin von Maven funktioniert, aber ich bin zu 99% sicher, dass Sie es von einem bestimmten Zweig freigeben müssen. Um dies zu beheben, würde ich empfehlen, als einen Vorbauschritt oder einen Shell-Befehl Folgendes anzugeben:

git checkout master; git pull Origin master

Das wird das Problem lösen, hoffe ich;)

6
Eugene Sajine

(Gelöst)

Hallo, Ich hatte das gleiche Problem, als ich versuchte, einen parametrisierten Release-Build aus einem Zweig mit Maven-Release-Plugin durchzuführen: 2.5.3 und Maven-Scm-Provider-Jgit: 1.9.5.

Ich wollte in der Lage sein, den Zweig für den "parametrisierten Release-Build" auszuwählen. Dies funktionierte nicht. Wenn ich "Checkout/Zusammenführen mit lokalem Zweig (optional)" wählte, funktionierte es, endete jedoch mit einem Zweig "Origin/origin/mybranch". in Remote (wiederholter Origin).

So:

  • "Git-Parameter" zu "Dieses Projekt ist parametriert" hinzufügen
    Name: Niederlassung
    ParameterType: Branch
    Klicken Sie auf Erweitert:
    Abzweigfilter: Ursprung/(.*)
    (das war der Trick!)

  • Git Repository:
    Zu erstellende Verzweigungen: refs/remotes/Origin/$ {branch}

  • Zusätzliche Verhalten: -> Checken Sie zu einer bestimmten lokalen Niederlassung
    Zweigname: $ {Zweig} 

Habe Spaß :-)

2
R.S

Ich möchte mehrere Zweige bauen und jeden Zweig unter seinem Namen überprüfen. Ich verwende das GIT-Plugin 2.4.0.

Das Antwort von Matthias Braun erhält einen benannten Zweig, der jedoch nicht nach dem entfernten Zweig benannt ist.

Anstatt den lokalen Zweig master festzulegen, setzen Sie den lokalen Zweig $GIT_BRANCH.

Ich habe diese Lösung in https://issues.jenkins-ci.org/browse/JENKINS-6856 gefunden. _ 

2

Fügen Sie der Maven-Befehlszeile die Release-Vorbereitung hinzu: -DpushChanges=false -DlocalCheckout=true 

Dies bedeutet, dass Maven das verwenden würde, was Jenkins im Arbeitsverzeichnis .git erhalten hat, und weder das Remote kopieren noch Push to Remote.

Ich empfehle, den vollständig qualifizierten refs/remotes/Origin/develop als Git "Branch to build" zu konfigurieren. Auf diese Weise erscheint es mir verständlicher. 

In diesem Fall würde Ihr $ GIT_BRANCH von Jenkins auf Origin/develop gesetzt.

Fügen Sie dann statt zu kompliziertem (aber tragbarem) GitPublisher einen Post-Build-Schritt "Execute Shell" hinzu:

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

Dadurch werden alle Änderungen wie pom.xml und Tags weiterentwickelt.

0
kubanczyk

Habe dasselbe Problem. @Eugene-Lösung funktionierte nur einmal. Beim zweiten Versuch ist ein Fehler aufgetreten - "HEAD kann nicht aus dem Repository gelöscht werden" oder so.

Ich habe das gegründet ( source ):

Und m2 zusätzliche Schritte (Pre-Build)

git checkout master || git checkout -b master

git reset --hard Origin/Master

Und jetzt finde ich es ok.

0
Pawel

Ich hatte das gleiche Problem ... Ich habe die Lösung von Constantine ausprobiert, die einwandfrei funktionierte, aber das Tag und die Commits wurden in das Remote-Repository "localbranchname" verschoben.

Also tat ich dasselbe aber manuell: Fügen Sie zunächst ein Shell-Skript vor den Schritten hinzu:

git branch -f localJenkins
git checkout localJenkins

Dann ein Post-Step-Shell-Skript:

git checkout master
git rebase localJenkins
git branch -D localJenkins
git Push Origin master
git Push --tag

Das funktioniert! Auf diese Weise haben Sie keine Remote-Verzweigung von jenkins, Commits und Tag befinden sich auf dem Master-Zweig (oder einem anderen Zweig).

hoffe das hilft !

0
antoine