9

Jenkins 1.500 で現在のバージョンの Git プラグイン (SCM プロバイダーとパブリッシャー) を使用しています。私のgit HTTP URLと「feature-*」の「構築するブランチ」設定を使用して、SCMポーリングは正常に機能します。これにより、「feature-1234」などの任意のブランチへの変更が検出され、ビルド/テスト/カバレッジ タスクが実行され、成功または失敗が報告されます。ビルドとコード レビューが成功した後にコードが終了する統合ブランチからのマージを含め、これはすべて正常に機能します。

問題は、同じ「feature-1234」ブランチで、完了したビルド ブランチを原点に戻そうとすることにあります。この場合のビルド変数 "GIT_BRANCH" には "origin/feature-1234" が含まれており、ビルドが成功した後、Git Publisher で次のエラーと失敗が発生します。

Pushing HEAD to branch origin/feature-1234 at repo origin
ERROR: Failed to push branch origin/feature-1234 to origin
hudson.plugins.git.GitException: Command "/usr/bin/git push https://jenkins:jenkinsPWD@myproject.com/git/project HEAD:origin/feature-1234" returned status code 1:
stdout: 
stderr: error: unable to push to unqualified destination: origin/feature-1234
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'https://jenkins:jenkinsPWD@myproject.com/git/project'

    at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:897)
    at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:858)
    at hudson.plugins.git.GitAPI.push(GitAPI.java:915)
    at hudson.plugins.git.GitPublisher$4.invoke(GitPublisher.java:351)
    at hudson.plugins.git.GitPublisher$4.invoke(GitPublisher.java:333)
    at hudson.FilePath.act(FilePath.java:865)
    at hudson.FilePath.act(FilePath.java:838)
    at hudson.plugins.git.GitPublisher.perform(GitPublisher.java:333)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:810)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:785)
    at hudson.model.Build$BuildExecution.post2(Build.java:183)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:732)
    at hudson.model.Run.execute(Run.java:1582)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:236)
Build step 'Git Publisher' changed build result to FAILURE
Build step 'Git Publisher' marked build as failure

そこに余分な「起源」が見えますか?origin/feature-1234 <== ${GIT_BRANCH} の現在の値です。これがリモート ブランチであることは理解していますが、従うべきプロセスの実行が妨げられています。

何か簡単なことを聞​​き逃したら、ぜひ聞いてみたいです。しかし、ビルドのさまざまな git 関連部分に対してさまざまな設定を試してみましたが、マージしてテストしたコードを作業ブランチにコミットすることはできません (簡単に実行できる統合ブランチとは対照的です。

4

6 に答える 6

1

手動で変更をプッシュします。バッチ スクリプトでは、次のように Windows 環境変数を使用できます。

これは、たとえば次のように評価されます。「git チェックアウト機能-1234」

git checkout %GIT_BRANCH:origin/= %

これは、たとえば次のように評価されます。「git push オリジン機能-1234」

git push %GIT_BRANCH:/= %

${GIT_BRANCH##origin/}やなどのトークン マクロでも同様のことができます${GIT_BRANCH#*/}。これらは一部の Jenkins プラグインで機能しますが、すべてではないため、Git Publisher では機能しない可能性があります。

于 2015-10-06T09:22:36.227 に答える
1

ビルド構成では、「ソースコード管理」=>アドバンスフィールド「名前」がありますリポジトリのIDを指定してから、gitパブリッシャープラグインで使用する必要があります:「ターゲットリモート名」

これらの 2 つの名前は、「?」を見て同一である必要があります。- 詳細情報を取得するには

于 2014-10-01T01:32:40.197 に答える
1

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

そのような場合、あなたの $GIT_BRANCH は、ジェンキンスによって魔法のように設定されorigin/feature-1234、あなたが観察したものと同じになります。

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

echo Remote branch is $GIT_BRANCH, replacing origin with refs/heads.
git push --follow-tags "$GIT_URL" "+HEAD:${GIT_BRANCH/#origin\//refs/heads/}"
于 2016-11-17T11:22:41.783 に答える
1

私にとっての回避策は、少なくとも毎回同じになる場合は、ブランチを手動でプッシュするようです。

于 2013-02-28T15:18:40.457 に答える