Jenkins + Git Publisher - 如何回到{GIT_BRANCH}?

时间:2013-02-08 05:21:44

标签: git jenkins

我在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>

6 个答案:

答案 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