Hudson CI上的Active Git分支是“(无分支)”

时间:2010-10-04 19:46:20

标签: git hudson git-checkout

My Ant build.xml脚本以

开头
<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>
<echo>PWD = ${env.PWD}</echo> 

Hudson CI设置为在任何分支更改时构建。控制台输出是......

Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
GitAPI created
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48)
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...'
 [echo] GIT_BRANCH = ${env.GIT_BRANCH}
 [echo] PWD = /cygdrive/d/.hudson

从控制台输出中,Hudson知道它正在构建主题分支DPM-48但是没有设置环境变量GIT_BRANCH并且'git branch'返回git处于'分离的HEAD'状态

* (no branch)
master
DPM-48

我想知道的是我在哈德森建立的分支。必须有办法做到这一点。

3 个答案:

答案 0 :(得分:33)

分辨

Hudson bug 6856看到abayer的评论后,我采取了以下步骤:

  • 使用Hudson插件管理器,我更新了我的Hudson Git插件版本1.1)以获得abayer的修复。
  • 使用Hudson作业配置,我点击了“源代码管理”下的“高级”按钮 - &gt; “分支建设”。然后我将“使用本地分支”更改为用于名称的内容。什么都没关系。
  • 然后我点击“保存”按钮,开始使用“立即构建”
  • 进行构建

alt text

构建日志显示

[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083

而不是

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083

这意味着我不处于'独立头'状态,因此可以提交,创建标签和推送。

我可以使用'git rev-parse HEAD'来获取提交哈希,并在'git show-ref'的输出中找到它,以便在需要时找到分支的真实名称。

我现在能够将成功的构建标记推送到我的git repo。

答案 1 :(得分:10)

注意:OP milkplus的评论是指最近的Hudson bug 6856(2010年6月),其中提及:

  

无论什么

,Git都会以独立的头部构建

虽然目前尚不清楚该特定问题是否会得到解决(答案表明它可能实际上“按设计工作”!),但它也引用this version of hudson Git Plugin,允许结帐本地分支。


你在 DETACHED HEAD ,因为,由于git插件现在正在运行,它确实直接签出了提交SHA1,而不是分支HEAD

  

任何分支都不会记录您HEAD分离时所处的状态(这很自然 - 您不在任何分支上)。   这意味着您可以通过切换回现有分支来丢弃临时提交和合并。

您的构建脚本可以首先尝试find what branch the relevant commit is coming from


通过查看milkplus来实现OP source code of the Hudson Git Plugin

public void buildEnvVars(AbstractBuild build, java.util.Map<String, String> env) {
    super.buildEnvVars(build, env);
    String branch = getSingleBranch(build);
    if(branch != null){
        env.put(GIT_BRANCH, branch);
    }
}

设置了环境变量GIT_BRANCH,但它在xml构建脚本中似乎没有任何值:

<property environment="env"/>
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo>

如果是这种情况,可能是因为issue 7554

  为构建

选择多个分支时,未设置

GIT_BRANCH      

    
      

当尝试识别当前构建的分支时,我发现当选择构建多个分支时,GIT_BRANCH环境变量未设置。

    
         

这不是一个真正的错误,就像功能请求一样,我认为 - GIT_BRANCH env var仅在有一个分支时才设置,因此,如果/当有多个分支时,它就不相关分支机构。我不确定在这种情况下我们如何为多个分支格式化env var。

  
     

我认为GIT_BRANCH应设置为当前正在构建的分支。   就像构建在master上一样,它将包含master。

     

这将有助于例如推送到另一个远程构建期间构建的分支。   或者使用要构建的正确分支集触发另一个Build。

有点像NPE described here

alt text

  

由于某种原因,Git插件开始为GIT_BRANCH环境变量传递空值   这导致Maven插件在System.getProperties().putAll(systemProps)调用中失败。

     

解决方案是使用“master”作为默认Git分支而不是“**”或空字符串。

答案 2 :(得分:2)

非常感谢您分享此解决方案!

我找到这个可选对话框来设置本地分支时遇到了一些麻烦 - 并且向其他人展示这也是当前的方法,在2015年我还要附上jenkins当前gui对话框的一些截图。

enter image description here enter image description here