我在Jenkins 1.500上使用当前版本的Git插件(SCM提供程序和发布者)。 SCM轮询工作正常,使用我的git HTTP URL和“branches to build”设置“feature- *”。这将获取对任何分支的更改,例如“feature-1234”,运行构建/测试/覆盖任务,以及成功或失败的报告。所有这些都可以正常工作,包括集成分支的合并,代码应该在成功构建和代码审查后结束。
问题在于尝试将完成的构建分支BACK推送到原点,在同一个“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 &lt; ==这是$ {GIT_BRANCH}的当前值,虽然我知道它是一个远程分支,但它阻止我运行我们想要遵循的过程。< / p>
如果我遗漏了一些简单的东西,我很乐意听到它。但是我已经为构建的各种git相关部分尝试了许多不同的设置,似乎没有任何东西允许我将合并和测试的代码提交回工作分支(而不是集成分支,这很容易做到。< / p>
答案 0 :(得分:1)
对我来说,解决方法似乎是手动推动分支,至少每次都是相同的。
答案 1 :(得分:1)
在构建配置中,&#34;源代码管理&#34; =&GT;预先 有一个字段&#34;名称&#34; 您需要指定存储库的ID,然后在git发布者插件中使用它:&#34;目标远程名称&#34;
这两个名字必须相同 看看&#34;?&#34; - 获取更多信息
答案 2 :(得分:1)
我手动推动变化。您可以在批处理脚本中使用如下所示的Windows环境变量:
这评估为例如。 'git checkout feature-1234'
git checkout %GIT_BRANCH:origin/= %
这评估为例如。 'git push origin feature-1234'
git push %GIT_BRANCH:/= %
您还可以使用${GIT_BRANCH##origin/}
和${GIT_BRANCH#*/}
等令牌宏执行类似的操作。这些工作在一些Jenkins插件中,但不是全部,所以它可能在Git Publisher中不起作用。
答案 3 :(得分:1)
我建议将完全限定的/refs/remotes/origin/feature-1234
配置为您的Git&#34;分支以构建&#34;。这种方式对我来说似乎更容易理解。
在这种情况下,您的$ GIT_BRANCH会被Jenkins神奇地设置为origin/feature-1234
,与您观察到的相同。
然后,不要使用过于复杂(但可移植)的GitPublisher,只需添加一个构建后的步骤&#34;执行Shell&#34;:
echo Remote branch is $GIT_BRANCH, replacing origin with refs/heads.
git push --follow-tags "$GIT_URL" "+HEAD:${GIT_BRANCH/#origin\//refs/heads/}"
答案 4 :(得分:0)
在构建部分中,添加“执行Shell脚本”,请使用以下Shell脚本:
echo current Branch is ${GIT_BRANCH#*/}
git checkout ${GIT_BRANCH#*/}
git commit -am 'Your commit message'
git push origin ${GIT_BRANCH#*/}
这应该是构建部分的最后一步。
答案 5 :(得分: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