“Git fatal: ref HEAD bukanlah ref simbolis” saat menggunakan plugin rilis maven

104

Saya mendapatkan output error berikut saat menjalankan langkah persiapan plugin rilis Maven yaitu mvn release:prepare --batch-mode -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -Xdari rencana Atlassian Bamboo. Namun melakukan hal yang sama di baris perintah berfungsi dengan baik. Tumpukan kesalahan lengkap ada di bawah.

Ada ide bagaimana ini bisa diselesaikan?

[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

MEMPERBARUI:

Melakukan git ls-remote .klon ruang kerja lokal menghasilkan:

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

Melakukan git ls-remote .klon bambu menghasilkan:

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

dan ini sangat aneh mengapa output klon pembangunan lokal sangat berbeda dengan bambu?

SkyWalker
sumber
4
Oke, jadi masalahnya di sini adalah bahwa pembayaran di bagian Bamboo dalam status "KEPALA terpisah". Tampaknya Maven mencoba mengurai nama cabang saat ini dan gagal karena dalam status HEAD terpisah, HEADref tidak lagi merujuk ke nama cabang, tetapi SHA1. Anda dapat mensimulasikan ini secara lokal dengan menjalankan git checkout SHA1atau menambahkan ^{}dengan nama ref: git checkout HEAD^{}. Sepertinya plugin Bamboo git mencoba untuk memeriksa cabang, jika memungkinkan. Jadi sepertinya Anda memiliki balapan: sebelum build berjalan, hal-hal baru telah muncul. Belum jelas bagi saya bagaimana cara memperbaikinya.
John Szakmeister

Jawaban:

153

Saya mengalami kesalahan yang sama pada Jenkins dalam kombinasi dengan plugin rilis maven, kami memperbaikinya dengan membuka Perilaku tambahan, Periksa ke cabang lokal tertentu dan masukkan 'master'

Saya menyadari ini bukan solusi tetapi mungkin memberi Anda beberapa arahan ke mana mencarinya.

jvwilge.dll
sumber
3
Ini berfungsi saat Anda membangun dari cabang master. Jika cabang Anda berbeda, bahkan setelah mengubahnya menjadi nama cabang tertentu, itu tidak berfungsi.
siddhusingh
29
Saya berada di cabang yang berbeda dari master dan berhasil juga. Saya pikir masalahnya adalah plugin jenkins git biasanya memeriksa cabang dalam status kepala terpisah. Jadi git symbolic-refperintahnya gagal. Dengan menambahkan Check out to specific local branchkami memperbaiki ini.
René Link
16
Menggunakan **alih-alih masterakan mencocokkan nama cabang lokal dengan yang jauh.
neXus
1
Menurut bantuan ( Git Plugin - Jenkins - Jenkins Wiki ), membiarkan field kosong juga dapat berfungsi untuk ini: "Jika dipilih, dan nilainya adalah string kosong atau **, maka nama cabang dihitung dari cabang jarak jauh tanpa asal . "
evgeny9
@jvwilge Dalam kasus saya, ini adalah pipeline bersama, jadi semua pengaturan berasal dari pom.xml. bagaimana cara menulis dalam kode instruksi ini: Perilaku tambahan, Periksa ke cabang lokal tertentu dan masukkan 'master'
arielma
31

Untuk Jenkins dan GIT, tambahkan perilaku tambahan check out to specific local branchdan gunakan Workspace Cleanup Pluginuntuk membersihkan ruang kerja Anda ke awal pekerjaan CI Anda.

toschneck
sumber
1
terima kasih, ini berhasil untuk saya. Saya perlu menambahkan -Darguments="-Dmaven.deploy.skip=true"juga.
timbru31
@toschneck Hai, saya mengalami masalah yang sama persis dengan Jenkins dan Git. Bisakah Anda memperluas jawaban Anda di sini untuk memasukkan perintah dan konfigurasi untuk plugin yang Anda sebutkan. Terima kasih.
Jeremy
Apa alasan untuk juga membersihkan ruang kerja?
kap
Saat ini saya pindah lebih jauh ke plugin maven-jgitflow. Ini mendukung fitur dan perbaikan bug bercabang dan memiliki fungsionalitas rilis terbaik yang pernah saya lihat. bitbucket.org/atlassian/jgit-flow/wiki/Home
toschneck
Menambahkan "check out ke cabang lokal tertentu" juga berfungsi untuk saya.
johnlinp
11

Masalah di Atlassian Bamboo diselesaikan dengan menghapus centang pada pengaturan default Use shallow clonesdengan deskripsi Fetches the shallowest commit history possible. Do not use if your build depends on full repository history. Kotak centang ini terletak di bawah Konfigurasi Rencana -> tab Repositories -> Git -> Opsi lanjutan

Setelah ini semua rilis berfungsi dengan baik.

SkyWalker
sumber
5

Menghapus centang pada Use shallow clonestidak cukup dalam kasus saya (saya menggunakan Bamboo 5.7.2). Saya juga perlu mengaktifkan Force Clean Builddi tugas Source Code Checkout. Mengaktifkan will Use shallow cloneswork untuk eksekusi tugas berikutnya, tetapi semua eksekusi berikutnya akan menghasilkan kesalahan yang sama.

Jean Marois
sumber
4

Saya telah melihat masalah ini di bawah Bamboo yang digunakan dengan plug-in Maven Release. Saya telah memperbaikinya dengan mengaktifkan opsi 'Force Clean Build' di tugas 'Source Checkout'. Bamboo mengatakan ini mungkin membuat pembangunan lebih lambat, tetapi berhasil dan saya tidak melihat peningkatan waktu yang signifikan.

zakmck
sumber
Versi Bambu mana yang Anda gunakan? Saya mencoba ini tetapi tidak berhasil untuk saya saat itu.
SkyWalker
1
Saya menggunakan versi 5.3 build 4101 - 09 Des 13
zakmck
3

Saya menggunakan Proyek Tim Jenkins dengan Pengaturan Proyek Multibranch.

Saya sebelumnya menggunakan checkout scmperintah.

Sekarang saya menggunakan kode berikut:

checkout([
                 $class: 'GitSCM',
                 branches: scm.branches,
                 extensions: scm.extensions + [[$class: 'CleanCheckout'], [$class: 'LocalBranch', localBranch: 'new']],
                 userRemoteConfigs: scm.userRemoteConfigs
            ])
kevcodez
sumber
1
Memberi ini suara positif karena sepertinya berhasil. Tetapi setelah beberapa kali mengutak-atik, saya perhatikan bahwa itu benar-benar membuat cabang baru yang disebut "baru" (saat menggunakan dengan plugin rilis maven). Pendekatan yang lebih tepat adalah mengubah newdengan **, yang membuat nama cabang lokal sama dengan remote.
Tobb
3

yang berhasil bagi saya adalah memanggil "git checkout -f master" sebelum memanggil "mvn release"

Vincent F.
sumber
0

Bagi kami masalahnya adalah dengan versi maven yang ditentukan dalam file pom. Memperbaiki versi maven yang ditentukan dalam file pom sesuai dengan yang di bambu memperbaiki masalah

Manu
sumber
0

Untuk tindakan GitHub Anda dapat setup actions/checkout@v2denganref: master

steps:
  - uses: actions/checkout@v2
    with:
      ref: master
RecuencoJones
sumber