如何使用Jenkins Git插件接收本地Git分支名称?

我正在使用Jenkins Git插件(v2.0)的Branch Specifier选项在特定分支上运行构build,例如1.4

在这种情况下${GIT_BRANCH}包含origin/1.4值。

我怎样才能收到用于克隆的本地Git分支的名称(即只有1.4没有origin/前缀?

我试过Check out to specific local branch额外的行为与分支名称1.4 ,但没有任何改变。

我在GitHub上看到过相关的PR ,但是它被拒绝了(因为它只修复了一个远程origin情况)。

你可以很容易地从variables中${GIT_BRANCH##origin/}前缀: ${GIT_BRANCH##origin/}

虽然这不是一个非常通用的解决scheme,但它非常简单,我还没有看到由Jenkins克隆的仓库,远程名称将使用除origin之外的东西。

更新 :实际上, ${GIT_BRANCH#*/}将适用于任何来源,甚至包含斜杠的分支。 #非贪婪glob匹配, ##启用贪婪匹配。 有关详情,请参阅Bash参考手册 。

如果你把它作为本地分支检查出来,然后使用$ {GIT_LOCAL_BRANCH},它会给出本地分支的名字(比如'develop'而不是'origin / develop')(Git Plugin version 3.0.0)

我向jenkins-ci组发布了一条消息( https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/jenkinsci-dev/xuweZbwn9zE/BAWfs-ZeFAAJ ),build议对Git插件进行增强“签出到本地分支机构”选项。 默认情况下,git插件检出一个分离的头部。 本地分支可以让你指定一个特定的分支名称。 使用此方法进行configuration时,本地分支名称与指定的完全相同。

如果您使用Jenkins来执行maven版本,则必须将本地分支名称与远程分支名称相同。 有关详细信息,请参阅谷歌组织的文章。

为了解决这个问题,我创build了一个包含代码和testing用例的pull请求( https://github.com/jenkinsci/git-plugin/pull/381 )。

还创build了JIRA问题( https://issues.jenkins-ci.org/browse/JENKINS-33202 )来logging问题。

如果有人需要这个function,我鼓励你在小组讨论中投票,然后投票给JENKINS-33202。

我设法做了几个步骤:

  1. 使用以下命令添加Execute shell前置步骤:

    git_branch_local=$(echo $GIT_BRANCH | sed -e "s|origin/||g") echo GIT_BRANCH_LOCAL=$git_branch_local > build.properties

  2. build.properties文件添加一个Inject environment variables前置步骤

那么你应该有一个GIT_BRANCH_LOCAL环境variables没有origin/

我今天遇到了这个问题。 原因是Jenkins git插件会将“origin /”添加到您提供给GIT_BRANCH构build参数的任何分支名称。 见https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

git插件设置了几个可以在你的脚本中使用的环境variables:GIT_BRANCH – 当前正在使用的分支的名字,例如“master”或者“origin / foo”

因此,当您使用参数GIT_BRANCH = foo进行构build时,Jenkins只会在其前面添加“origin /”。 那么,当你这样做

 git check out ${GIT_BRANCH} 

你真的在做

 git check out origin/foo 

你可以做什么来避免这种情况,在你的构build参数中使用其他的东西,比如GIT_BRANCH_NAME或者别的什么,只是不要使用GIT_BRANCH。 在configuration中,删除GIT_BRANCH参数,并添加另一个名为GIT_BRANCH_NAME的参数。 然后在“使用参数编译”中,在GIT_BRANCH_NAME下指定您的分支。

虽然这是真的,正如dtabuenc在JanVčelák的回答中所说的那样,如果你想在Execute Shell构build步骤(或类似的)中获取分支名称,shell语法不会直接在标记macros上工作,你仍然可以使用相同的想法。

 TEMP_GIT_BRANCH=${GIT_BRANCH} MY_GIT_BRANCH="${TEMP_GIT_BRANCH#*/}" 

工作正常(这是有效的POSIX,不需要bash)。

我也遇到了这个问题。 这似乎是,当我改变Check out to specific local branch的价值,我需要删除生成服务器上的本地回购触发一个新的构build之前。

截至2016年3月(Git Plugin v2.4.3),现在本机支持。 简单地把**作为Checkout到Git Plugin的Check out to specific local branch的值,而不是任何macros/variables。

该字段的说明详细介绍了新的行为:

如果选中,并且它的值是一个空string或“**”,那么分支名称是从远程分支计算而不是原点。 在这种情况下,远程分支的origin / master将被签出到一个名为master的本地分支,远程分支origin / develop / new-feature将被签出到一个名为develop / newfeature的本地分支。

这是由@roostergx&@NickVolynkin在发布时提到的。 我只是在这里logging,希望在未来帮助人们。