"Git fatal: ref HEAD non è un riferimento simbolico" durante l'utilizzo del plug-in di rilascio di Maven


104

Ottengo il seguente output di errore durante l'esecuzione del plug-in di rilascio di Maven preparare il passaggio, ad es mvn release:prepare --batch-mode -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -X da un piano Atlassian Bamboo. Tuttavia, fare lo stesso nella riga di comando funziona bene. Lo stack completo degli errori è riportato di seguito.

Qualche idea su come risolverlo?

[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

AGGIORNARE:

L'esecuzione git ls-remote .su un clone dell'area di lavoro locale produce:

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^{}

Fare git ls-remote .sul clone di Bamboo produce:

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^{}

e questo è molto strano perché l'output del clone di sviluppo locale è così diverso da quello di Bamboo?


4
Ok, quindi il problema qui è che il checkout in Bamboo è in uno stato "TESTA staccata". Sembra che Maven stia tentando di analizzare il nome del ramo corrente e non riesce perché nello stato HEAD scollegato, il HEADriferimento non si riferisce più a un nome di ramo, ma a SHA1. È possibile simulare questo localmente eseguendo git checkout SHA1o aggiungendo ^{}al nome di un ref: git checkout HEAD^{}. Sembra che il plugin git di Bamboo tenti di effettuare il checkout del ramo, se possibile. Quindi sembra che tu abbia una gara: prima che la build venga eseguita, sono apparse nuove cose. Non mi è ancora chiaro come risolverlo.
John Szakmeister

Risposte:


153

Ho riscontrato lo stesso errore su Jenkins in combinazione con il plug-in di rilascio di Maven, lo abbiamo risolto andando su Comportamenti aggiuntivi, Esegui il check-out in un ramo locale specifico e inserisci 'master'

Mi rendo conto che questa non è una soluzione, ma potrebbe darti una direzione in cui guardare.


3
Funziona quando si costruisce dal ramo principale. Se il tuo ramo è diverso, anche dopo averlo cambiato con un nome di ramo specifico, non funziona.
siddhusingh

29
Sono su un ramo diverso dal master e funziona anche. Penso che il problema sia che il plugin git di jenkins normalmente controlla il ramo nello stato di testa distaccato. Quindi il git symbolic-refcomando fallisce. Aggiungendo Check out to specific local branchrisolviamo questo.
René Link

16
L'uso di **invece di masterfarà corrispondere il nome del ramo locale a quello remoto.
neXus

1
Secondo la guida ( Git Plugin - Jenkins - Jenkins Wiki ), lasciare il campo vuoto può funzionare anche per questo: "Se selezionato, e il suo valore è una stringa vuota o **, il nome del ramo viene calcolato dal ramo remoto senza l'origine ".
evgeny9

@jvwilge Nel mio caso, è una pipeline condivisa, quindi tutte le impostazioni provengono da pom.xml. come scrivo nel codice questa istruzione: Comportamenti aggiuntivi, Effettua il check-out in una filiale locale specifica e inserisci 'master'
arielma

31

Per Jenkins e GIT aggiungi il comportamento aggiuntivo check out to specific local branche usa Workspace Cleanup Pluginper pulire il tuo spazio di lavoro all'inizio del tuo lavoro CI.


1
grazie, questo ha funzionato per me. Anch'io avevo bisogno di aggiungere -Darguments="-Dmaven.deploy.skip=true".
timbru31

@toschneck Ciao, sto riscontrando esattamente questo problema usando Jenkins e Git. Potresti espandere la tua risposta qui per includere i comandi e la configurazione per il plugin che hai menzionato. Grazie.
Jeremy,

Qual è il motivo per pulire ulteriormente l'area di lavoro?
kap

Attualmente sono passato al plugin maven-jgitflow. Supporta il branching di funzionalità e bugfix e ha la migliore funzionalità di rilascio che abbia mai visto. bitbucket.org/atlassian/jgit-flow/wiki/Home
toschneck

L'aggiunta di "check out a una filiale locale specifica" funziona anche per me.
johnlinp

11

Il problema in Atlassian Bamboo è stato risolto deselezionando l'impostazione predefinita Use shallow clonescon la descrizioneFetches the shallowest commit history possible. Do not use if your build depends on full repository history . Questa casella di controllo si trova in Configurazione del piano -> scheda Archivi -> Git -> Opzioni avanzate

Dopo questo tutte le versioni funzionano bene.


5

Deselezionare Use shallow clonesnon era sufficiente nel mio caso (sto usando Bamboo 5.7.2). Avevo bisogno di abilitare anche l'attività Force Clean Builddi verifica del codice sorgente. L'abilitazione di Use shallow clonesfunzionerebbe per la successiva esecuzione del lavoro, ma tutte le successive esecuzioni risulterebbero nello stesso errore.


4

Ho riscontrato questo problema in Bamboo utilizzato con il plug-in Maven Release. L'ho risolto abilitando l'opzione "Force Clean Build" nell'attività "Source Checkout". Bamboo dice che questo potrebbe rallentare la compilazione, ma funziona e non ho visto alcun aumento significativo del tempo.


Quale versione di Bamboo hai usato? Ho provato questo ma non ha funzionato per me allora.
SkyWalker

1
Sto usando la build 5.3
4101-09

3

Sto usando un Jenkins Team Project con una configurazione di progetto multibranch.

In precedenza ho usato checkout scmcommand.

Ora sto usando il seguente codice:

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

1
Ho dato un voto positivo poiché sembrava fare il trucco. Ma dopo qualche altro ritocco, ho notato che in realtà ha creato un nuovo ramo chiamato "nuovo" (quando si utilizza con il plugin di rilascio di Maven). Un approccio più corretto sarebbe quello di cambiare newcon **, il che rende il nome del ramo locale uguale a quello remoto.
Tobb

3

quello che ha funzionato per me è stato chiamare "git checkout -f master" prima di chiamare "mvn release"


0

Per noi il problema era con la versione Maven specificata nel file pom. Corretta la versione Maven specificata nel file pom in accordo con quella in bamboo risolto il problema


0

Per le azioni di GitHub puoi configurare actions/checkout@v2conref: master

steps:
  - uses: actions/checkout@v2
    with:
      ref: master
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.