9

我在 Jenkins 1.500 上使用当前版本的 Git 插件(SCM 提供者和发布者)。SCM 轮询工作正常,使用我的 git HTTP URL 和“功能-*”的“构建分支”设置。这会获取对任何分支的更改,例如“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

在构建配置中,“Source Code Management” => Advance 有一个字段“Name” 需要指定repository的ID,然后在git发布者插件中使用:“Target remote name”

这两个名字需要相同看“?” - 获取更多信息

于 2014-10-01T01:32:40.197 回答
1

对我来说,一种解决方法似乎是手动推送分支,至少每次都相同时。

于 2013-02-28T15:18:40.457 回答
1

我建议将完全限定配置/refs/remotes/origin/feature-1234为您的 Git“要构建的分支”。这种方式对我来说似乎更容易理解。

在这种情况下,您的 $GIT_BRANCH 会被 Jenkins 神奇地设置为origin/feature-1234与您观察到的相同。

然后,不要使用过于复杂(但可移植)的 GitPublisher,只需添加一个构建后步骤“Execute Shell”:

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

我手动推动更改。您可以在批处理脚本中使用如下的 windows 环境变量:

这评估为例如。'git结帐功能-1234'

git checkout %GIT_BRANCH:origin/= %

这评估为例如。'git push origin feature-1234'

git push %GIT_BRANCH:/= %

您也可以对令牌宏执行类似的操作,例如${GIT_BRANCH##origin/}${GIT_BRANCH#*/}。这些在一些 Jenkins 插件中工作,但不是全部,所以它可能在 Git Publisher 中不起作用。

于 2015-10-06T09:22:36.227 回答
0

在构建部分添加“执行 shell 脚本”使用这个 shell 脚本:

echo current Branch is ${GIT_BRANCH#*/}
git checkout ${GIT_BRANCH#*/}
git commit -am 'Your commit message'
git push origin ${GIT_BRANCH#*/}

这应该是构建部分的最后一步。

于 2018-11-29T22:59:46.140 回答
0

首先,寻找GIT_LOCAL_BRANCH变量(https://plugins.jenkins.io/git/#branch-variables

在我的情况下它丢失了,所以我从GIT_BRANCH变量中提取它,作为一个肮脏的解决方法

$ GIT_LOCAL_BRANCH=$(echo ${GIT_BRANCH} | awk -F\/ '{print $2}')
$ echo $GIT_LOCAL_BRANCH
feature-1234
于 2020-04-11T01:11:08.693 回答