"Git fatal: ref HEAD ist kein symbolischer ref" bei Verwendung des Maven Release Plugins


104

Ich erhalte die folgende Fehlerausgabe, während ich den Vorbereitungsschritt für das Maven-Release-Plugin ausführe, dh mvn release:prepare --batch-mode -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -Xaus einem Atlassian Bamboo-Plan. Dasselbe in der Befehlszeile zu tun, funktioniert jedoch einwandfrei. Der vollständige Fehlerstapel ist unten.

Irgendwelche Ideen, wie dies gelöst werden kann?

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project hpcmom: An error is occurred in the checkin process: Exception while executing SCM command. Detecting the current branch failed: fatal: ref HEAD is not a symbolic ref -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project hpcmom: 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.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
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:281)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:232)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 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:277)
    ... 22 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)
    ... 30 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)
    ... 34 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
simple  02-Dec-2013 17:18:09    Failing task since return code of [/opt/dev/apache-maven/3.0.5//bin/mvn -Djava.io.tmpdir=/opt/atlassian/bamboo/5.2.1/temp/HPCMOM-RELEASE-JOB1 release:prepare --batch-mode -DignoreSnapshots=false -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -X] was 1 while expected 0

AKTUALISIEREN:

Wenn Sie git ls-remote .einen lokalen Arbeitsbereichsklon ausführen, wird Folgendes erzeugt:

azg@olympus:~/code/hpcmom$ git ls-remote .
7894eea08a0afecb99515d1339623be63a7539d4    HEAD
7894eea08a0afecb99515d1339623be63a7539d4    refs/heads/master
7894eea08a0afecb99515d1339623be63a7539d4    refs/remotes/origin/HEAD
7894eea08a0afecb99515d1339623be63a7539d4    refs/remotes/origin/master
6a7095b86cccdfd4b28e4dea633d0930809ae9ac    refs/tags/v1.0
1a53462b1ecf0abfea8245016304cda9c78b420d    refs/tags/v1.0^{}
5113a7cbcf35c47b680a9c36e15e5fa01ef1d2e6    refs/tags/v1.1
79a3073ecabe65d3c8051520f8007d9e49a65a06    refs/tags/v1.1^{}
a00249209597ea1214d80ee38f228c40db7022c2    refs/tags/v1.1.0
e892bce8d25d87368ab557fee0d30810bef7e31e    refs/tags/v1.1.0^{}
b491a312c39088533cb069e4ab1ae8a00d1f6bfe    refs/tags/v1.1.2
a3f7618dada7ed60d8190426152ffd90e0e40a86    refs/tags/v1.1.2^{}

Wenn Sie git ls-remote .mit dem Bambusklon arbeiten, erhalten Sie:

azg@olympus:/var/atlassian/application-data/bamboo/xml-data/build-dir/HPCMOM-RELEASE-JOB1$ git ls-remote .
2422ce066ac35dae3c54f1435ef8dae5008a9a14    HEAD
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/heads/master
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/remotes/origin/HEAD
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/remotes/origin/master
7539f9700d78a1b766fca7ed9f409914f1ea9d08    refs/tags/vnull
6bfa8c3fdb1f8f56a385035f01b1b77b6e88da8b    refs/tags/vnull^{}

und das ist sehr seltsam, warum unterscheidet sich die Ausgabe des lokalen Entwicklungsklons so stark von der von Bamboo?


4
Okay, das Problem hier ist, dass sich die Kasse unter Bamboo in einem "losgelösten KOPF" -Zustand befindet. Es scheint, dass Maven versucht, den aktuellen Zweigstellennamen zu analysieren, und dies schlägt fehl, da sich die Referenz im getrennten HEAD-Status HEADnicht mehr auf einen Zweigstellennamen, sondern auf einen SHA1 bezieht. Sie können dies lokal simulieren, indem Sie den Namen einer Referenz git checkout SHA1ausführen oder an diesen anhängen ^{}: git checkout HEAD^{}. Es sieht so aus, als ob das Bamboo Git Plugin versucht, den Zweig auszuchecken, wenn es überhaupt möglich ist. Es sieht also so aus, als hätten Sie ein Rennen: Bevor der Build ausgeführt wird, sind neue Dinge aufgetaucht. Mir ist noch nicht klar, wie ich das beheben soll.
John Szakmeister

Antworten:


153

Ich bin auf denselben Fehler bei Jenkins in Kombination mit dem Maven-Release-Plugin gestoßen. Wir haben ihn behoben, indem wir zu Zusätzliche Verhaltensweisen gegangen sind. In einem bestimmten lokalen Zweig auschecken und 'master' eingeben.

Mir ist klar, dass dies keine Lösung ist, aber es könnte Ihnen eine Richtung geben, in die Sie schauen müssen.


3
Es funktioniert, wenn Sie vom Hauptzweig aus bauen. Wenn Ihre Niederlassung anders ist, funktioniert sie auch nach dem Ändern in einen bestimmten Zweignamen nicht.
Siddhusingh

29
Ich bin in einem anderen Zweig als Master und es funktioniert auch. Ich denke, das Problem ist, dass das Jenkins Git-Plugin normalerweise den Zweig im Status "Abgelöst" überprüft. Der git symbolic-refBefehl schlägt also fehl. Durch Hinzufügen Check out to specific local branchbeheben wir dies.
René Link

16
Wenn Sie **anstelle von verwenden, masterwird der Name des lokalen Zweigs mit dem Namen des Remote-Zweigs abgeglichen.
neXus

1
Laut Hilfe ( Git Plugin - Jenkins - Jenkins Wiki ) kann es auch funktionieren, das Feld leer zu lassen: "Wenn ausgewählt und sein Wert eine leere Zeichenfolge ist **, wird der Zweigname aus dem Remote-Zweig ohne Ursprung berechnet . "
evgeny9

@jvwilge In meinem Fall handelt es sich um eine gemeinsam genutzte Pipeline, sodass alle Einstellungen von pom.xml stammen. Wie schreibe ich im Code diese Anweisung: Zusätzliche Verhaltensweisen, Auschecken in einen bestimmten lokalen Zweig und Eingabe von 'master'
arielma

31

Fügen Sie für Jenkins und GIT das zusätzliche Verhalten hinzu check out to specific local branchund verwenden Sie das, Workspace Cleanup Pluginum Ihren Arbeitsbereich am Anfang Ihres CI-Jobs zu bereinigen.


1
Danke, das hat bei mir funktioniert. Ich musste auch hinzufügen -Darguments="-Dmaven.deploy.skip=true".
Timbru31

@toschneck Hallo, ich habe genau dieses Problem mit Jenkins und Git. Könnten Sie bitte Ihre Antwort hier erweitern, um die Befehle und die Konfiguration für das von Ihnen erwähnte Plugin aufzunehmen? Vielen Dank.
Jeremy

Was ist der Grund, den Arbeitsbereich zusätzlich zu reinigen?
Kap

Derzeit bin ich weiter zum maven-jgitflow Plugin übergegangen. Es unterstützt die Verzweigung von Funktionen und Bugfixes und bietet die beste Release-Funktionalität, die ich je gesehen habe. bitbucket.org/atlassian/jgit-flow/wiki/Home
toschneck

Das Hinzufügen von "Auschecken in eine bestimmte lokale Niederlassung" funktioniert auch für mich.
Johnlinp

11

Das Problem in Atlassian Bamboo wurde gelöst, indem die Standardeinstellung Use shallow clonesmit Beschreibung deaktiviert wurde Fetches the shallowest commit history possible. Do not use if your build depends on full repository history. Dieses Kontrollkästchen befindet sich unter Plan-Konfiguration -> Registerkarte Repositorys -> Git -> Erweiterte Optionen

Danach funktionieren alle Releases einwandfrei.


5

Das Deaktivieren von Use shallow cloneswar in meinem Fall nicht ausreichend (ich verwende Bamboo 5.7.2). Ich musste auch die Force Clean BuildAufgabe "Quellcode-Checkout" aktivieren . Das Aktivieren von Use shallow cloneswürde für die nächste Ausführung des Jobs funktionieren, aber jede nachfolgende Ausführung würde zu demselben Fehler führen.


4

Ich habe dieses Problem unter Bamboo gesehen, das mit dem Maven Release-Plug-In verwendet wurde. Ich habe das Problem behoben, indem ich die Option "Clean Build erzwingen" in der Aufgabe "Source Checkout" aktiviert habe. Bamboo sagt, dies könnte den Build verlangsamen, aber es funktioniert und ich habe keinen signifikanten Zeitanstieg gesehen.


Welche Version von Bamboo haben Sie verwendet? Ich habe es versucht, aber es hat damals bei mir nicht funktioniert.
SkyWalker

1
Ich benutze den 5.3 Build 4101 - 09 Dec 13
zakmck

3

Ich verwende ein Jenkins-Teamprojekt mit einem Multibranch-Projekt-Setup.

Ich habe vorher benutzt checkout scm Befehl verwendet.

Jetzt verwende ich den folgenden Code:

checkout([
                 $class: 'GitSCM',
                 branches: scm.branches,
                 extensions: scm.extensions + [[$class: 'CleanCheckout'], [$class: 'LocalBranch', localBranch: 'new']],
                 userRemoteConfigs: scm.userRemoteConfigs
            ])

1
Hat dies positiv bewertet, da es den Trick zu tun schien. Aber nach einigem weiteren Basteln bemerkte ich, dass tatsächlich ein neuer Zweig namens "new" erstellt wurde (bei Verwendung mit dem Maven Release Plugin). Ein richtiger Ansatz würde zu ändern sein newmit **, die die lokalen Zweignamen als entfernten das gleiche macht.
Tobb

3

Was für mich funktionierte war, "git checkout -f master" aufzurufen, bevor ich "mvn release" aufrief.


0

Für uns war das Problem mit der in der POM-Datei angegebenen Maven-Version. Das Problem wurde behoben, indem die in der POM-Datei angegebene Maven-Version gemäß der in Bambus korrigiert wurde


0

Für Sie GitHub Aktionen können Setup actions/checkout@v2mitref: master

steps:
  - uses: actions/checkout@v2
    with:
      ref: master
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.