83

私はGitもJenkinsも初めてです。私の問題は、Jenkins Maven リリース プラグインを動作させることができないことです。

Jenkins で一般的な Maven ビルドをビルドするとうまく動作しますが、Maven リリース プラグインでリリースを実行しようとすると、次のスタック トレースが表示されます。

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

失敗したコマンドとエラー メッセージは次のとおりです。

[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

Jenkins Git プラグインが切り離された HEAD ref "(no branch)" を作成し、それが問題を引き起こしていることがわかりました。しかし、この参照が作成された理由や、この問題をどのように解決できるかはまったくわかりません。

どんな助けにも感謝します。

4

11 に答える 11

93

ローカル ブランチへのチェックアウト/マージ (オプション)フィールドは、Git プラグインの現在の (2.2.1) バージョンではなくなりました。

[追加の動作] → [特定のローカル ブランチにチェックアウト] に移動しました。

設定オプションの Jenkins スクリーンショット

その値をマスターに設定すると、切り離されたヘッドではなく、チェックアウトされたブランチが得られました。

于 2014-04-17T10:56:54.300 に答える
25

更新 (2015 年 11 月): この解決策は、特定のバージョンの Git プラグイン (1.1.26) に対して提供されていることに注意してください。それ以降のバージョンでは、構成を容易にするためにプラグインが更新されました。

Jenkins Git プラグイン バージョン 1.1.26 の場合は、次を試してください。

ジョブ構成に移動します。Git セクションまで下にスクロールし、[リポジトリ] の下の [詳細...] ボタンをクリックします。次に設定します。

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

次に、別の「詳細...」ボタンをクリックして、次のように設定します。

Checkout/merge to local branch (optional): localbranchname

ローカル ブランチには好きな名前を付けることができますが、Refspec の宛先は、そのオプション フィールドのローカル ブランチ名 (この場合は「localbranchname」) と一致する必要があります。これにより、次のように HEAD が localbranchname にアタッチされます。

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

Maven Release は Jenkins でパスする必要があります。

ちなみに、これは Jenkins 1.492 と Jenkins Git プラグイン バージョン 1.1.26 で動作します。

于 2012-11-28T05:35:31.207 に答える
9

Git では、master や dev、その他のローカル ブランチなどのブランチをチェックアウトすると、HEAD (.git フォルダー内のファイル) に対応するブランチへの参照が含まれます。だから「付いてる」。

リベース、マージなどの操作を実行するとき、または特定のコミットをチェックアウトするとき、つまり「ブランチがありません」と表示されるときはいつでも、HEAD はローカルブランチへの参照を持っていませんが、コミットを直接指しています。内部に実際のSHA-1があります。つまり、それは切り離されています - どのブランチからも切り離されています。作成された新しい参照「no branch」はありません。

このコマンドgit symbolic-ref HEADは、HEAD コンテンツが参照か SHA-1 かをチェックし、それを出力します。

次のようにして確認できます。

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

現在、ほとんどの場合、Jenkins の Git プラグインは分離された HEAD 状態のコードで動作します。Maven リリース プラグインがどのように機能するかはわかりませんが、特定のブランチからリリースする必要があることは 99% 確信しています。これを修正するには、ビルド前のステップまたはシェル コマンドとして次のようなものを指定することをお勧めします。

git checkout master; git pull origin master

それは問題を解決するでしょう、私は願っています;)

于 2012-07-16T22:10:48.200 に答える
6

maven-release-plugin:2.5.3 および maven-scm-provider-jgit:1.9.5 を使用してブランチからパラメーター化されたリリース ビルドを実行しようとすると、同じ問題が発生しました。

「パラメーター化されたリリースビルド」のブランチを選択できるようにしたかったのです。これは機能せず、「チェックアウト/ローカル ブランチへのマージ (オプション)」を選択すると機能しましたが、リモートで「origin/origin/mybranch」というブランチになりました (繰り返し起点)。

そう:

  • 「Git Parameter」を「This project is parameterized」に追加
    Name: branch
    ParameterType: Branch
    クリック Advanced:
    Branch Filter:origin/(.*)
    (これはトリックでした!)

  • Git リポジトリ:
    ビルドするブランチ: refs/remotes/origin/${branch}

  • 追加の動作: -> 特定のローカル ブランチにチェックアウトします
    ブランチ名: ${branch}

楽しむ :-)

于 2018-07-12T16:45:31.203 に答える
1

私は同じ問題を抱えています。@Eugeneソリューションは一度だけ機能しました。

2 回目の試行で、「リポジトリから HEAD を削除できません」などのエラーが発生しました。

私はこれを見つけました(source):

および m2 追加ステップ (ビルド前)

git チェックアウト マスター || git チェックアウト -b マスター

git reset --hard オリジン/マスター

そして今、それは大丈夫だと思います。

于 2012-12-31T18:57:57.950 に答える
1

リリース準備のために Maven コマンド ラインに追加します。-DpushChanges=false -DlocalCheckout=true

これは、maven が jenkins が working directory 内で取得したものを使用し.git、リモートのクローンを作成したり、リモートにプッシュしたりしないことを意味します。

refs/remotes/origin/developGit の「ビルドするブランチ」として完全修飾を構成することをお勧めします。このように、私にはより理解しやすいようです。

そのような場合、あなたの $GIT_BRANCH はジェンキンスによって魔法のように設定されますorigin/develop

次に、過度に複雑な (しかし移植可能な) GitPublisher を使用する代わりに、ビルド後のステップ「シェルの実行」を追加するだけです。

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

これにより、pom.xml やタグなど、変更された maven がすべてプッシュされます。

于 2016-11-17T15:38:21.453 に答える
1

私も同じ問題を抱えていました。コンスタンティンのソリューションを試してみましたが、これは完全に機能しましたが、タグとコミットは「localbranchname」リモートリポジトリにプッシュされました。

だから私は同じことをしましたが、手動で行いました。

まず、プレステップ シェル スクリプトを追加します。

git branch -f localJenkins
git checkout localJenkins

次に、ステップ後のシェル スクリプト:

git checkout master
git rebase localJenkins
git branch -D localJenkins
git push origin master
git push --tag

これはうまくいきます!この方法では、jenkins リモート ブランチがなく、コミットとタグがマスター (または他の) ブランチに置かれます。

于 2013-01-07T10:15:32.957 に答える