如何使用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。
我设法做了几个步骤:
-
使用以下命令添加
Execute shell
前置步骤:git_branch_local=$(echo $GIT_BRANCH | sed -e "s|origin/||g") echo GIT_BRANCH_LOCAL=$git_branch_local > build.properties
-
为
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,希望在未来帮助人们。