Mavenリリースプラグインを使用しているときの「Gitの致命的:ref HEADはシンボリックな参照ではありません」


104

Mavenリリースプラグインの準備ステップの実行中にmvn release:prepare --batch-mode -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -X、Atlassian Bambooプランから次のエラー出力が表示されます。ただし、コマンドラインで同じことを行っても問題はありません。完全なエラースタックは次のとおりです。

これを解決するにはどうすればいいですか?

[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

更新:

こうgit ls-remote .ローカルワークスペースのクローンには、生成します。

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

こうgit ls-remote .竹クローンには生成します。

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

これは非常に奇妙ですが、ローカル開発クローンの出力がBambooのものと非常に異なるのはなぜですか?


4
さて、ここでの問題は、Bambooでのチェックアウトが「切り離されたHEAD」状態にあることです。Mavenが現在のブランチ名を解析しようとして失敗したようです。デタッチされたHEAD状態では、HEADrefはブランチ名ではなくSHA1を参照しているためです。これをローカルでシミュレートgit checkout SHA1する^{}には、ref:を実行するか、refの名前に追加しますgit checkout HEAD^{}。Bamboo gitプラグインは、可能であればブランチをチェックアウトしようとしているようです。だからあなたはレースをしているようです:ビルドが実行される前に、新しいものが表示されています。それを修正する方法はまだはっきりしていません。
John Szakmeister 2013

回答:


153

JenkinsでMavenリリースプラグインと組み合わせて同じエラーに遭遇しました。追加の動作に移動して修正し、特定のローカルブランチにチェックアウトして「master」と入力しました

私はこれが解決策ではないことを理解していますが、それはあなたがどこを見るべきかの方向をあなたに与えるかもしれません。


3
masterブランチからビルドしているときに機能します。ブランチが異なる場合、特定のブランチ名に変更しても機能しません。
siddhusingh 2014

29
私はマスターとは別のブランチにいて、それも機能します。問題は、jenkins gitプラグインが通常、分離ヘッド状態でブランチをチェックアウトすることだと思います。したがって、git symbolic-refコマンドは失敗します。追加Check out to specific local branchすることでこれを修正します。
ルネ・リンク

16
**代わりに使用masterすると、ローカルのブランチ名がリモートのブランチ名と一致します。
neXus

1
ヘルプ(Git Plugin-Jenkins-Jenkins Wiki)によると、フィールドを空のままにしてもこれで機能します:「選択した場合、その値が空の文字列またはの**場合、ブランチ名はオリジンのないリモートブランチから計算されます」
evgeny9

@jvwilge私の場合、それは共有パイプラインなので、すべての設定はpom.xmlから行われます。この命令をコードに書き込む方法:追加の動作、特定のローカルブランチにチェックアウトして「master」と入力
アリエルマ

31

JenkinsとGITの場合、追加の動作check out to specific local branchを追加し、を使用しWorkspace Cleanup PluginてワークスペースをCIジョブの最初にクリーンアップします。


1
おかげで、これは私のために働いた。も追加する必要が-Darguments="-Dmaven.deploy.skip=true"ありました。
timbru31、2015

@toschneckこんにちは、JenkinsとGitを使用してこの問題が発生しています。ここで答えを拡張して、あなたが言及したプラグインのコマンドと設定を含めてください。ありがとう。
ジェレミー

ワークスペースをさらにクリーンにする理由は何ですか?
kap

現在、私はさらにmaven-jgitflowプラグインに移動しました。機能とバグ修正の分岐をサポートし、私が見た中で最高のリリース機能を備えています。bitbucket.org/atlassian/jgit-flow/wiki/Home
toschneck 2016

「特定のローカルブランチにチェックアウト」を追加することも私にとってはうまくいきます。
johnlinp

11

Atlassian Bambooの問題はUse shallow clones、descriptionでデフォルト設定をオフにすることで解決されましたFetches the shallowest commit history possible. Do not use if your build depends on full repository history。このチェックボックスは、プランの構成->リポジトリタブ-> Git->詳細オプションの下にあります

この後、すべてのリリースは正常に動作します。


5

チェックを外す Use shallow clones私の場合だけでは不十分でした(私はBamboo 5.7.2を使用しています)。Force Clean Buildソースコードチェックアウトタスクでも有効にする必要がありました。を有効にするUse shallow clonesと、ジョブの次の実行で機能しますが、その後のすべての実行で同じエラーが発生します。


4

Mavenリリースプラグインで使用されるBambooでこの問題が発生しました。「ソースのチェックアウト」タスクで「強制クリーンビルド」オプションを有効にすることで修正しました。Bambooは、これによりビルドが遅くなる可能性があると述べていますが、動作し、大幅な時間の増加は見られませんでした。


Bambooのどのバージョンを使用しましたか?私はこれを試しましたが、当時はうまくいきませんでした。
SkyWalker、2014

1
私は5.3ビルドを使用しています
4101-

3

Jenkins Team ProjectをMultibranch Project Setupで使用しています。

以前にcheckout scmコマンドを使用しました。

今、私は次のコードを使用しています:

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

1
それはトリックをするように思われたので、これに賛成票を与えます。しかし、さらにいじくり回した後、実際に「new」という新しいブランチが作成されていることに気付きました(mavenリリースプラグインで使用する場合)。より正確な方法は、で変更newすることです**。これにより、ローカルブランチ名がリモートと同じになります。
トブ

3

私にとってうまくいったのは、「mvn release」を呼び出す前に「git checkout -f master」を呼び出すことでした


0

私たちにとっての問題は、pomファイルで指定されたmavenバージョンにありました。竹のバージョンに従ってpomファイルで指定されたmavenバージョンを修正して問題を修正しました


0

あなたが設定することができますGitHubのアクションのためにactions/checkout@v2ref: master

steps:
  - uses: actions/checkout@v2
    with:
      ref: master
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.