17

我的 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 分支”返回 git 处于“分离 HEAD”状态

* (no branch)
master
DPM-48

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

4

3 回答 3

33

解决

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

  • 使用 Hudson 插件管理器,我更新了我的 Hudson Git 插件版本 1.1) 以获得 abayer 的修复。
  • 使用 Hudson 作业配置,我单击了“源代码管理”->“要构建的分支”下的“高级”按钮。然后,我将“要使用的本地分支”更改为用于名称的东西。没关系。
  • 然后我单击“保存”按钮并使用“立即构建”开始构建

替代文字

构建日志显示

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

代替

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083

这意味着我没有处于“分离头”状态,因此可以进行提交、创建标签和推送。

如果需要,我可以使用“git rev-parse HEAD”获取提交哈希并在“git show-ref”的输出中找到该分支的真实名称。

我现在可以将成功的构建标签推送到我的 git 存储库。

于 2010-10-29T20:52:04.253 回答
10

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

无论如何,Git 都是用分离的头构建的

虽然尚不清楚该特定问题是否会得到解决(答案表明它实际上可能“按设计工作”!),但它也指的是这个版本的 hudson Git Plugin,允许签出本地分支。


你是DETACHED HEAD因为,因为 git 插件现在正在工作,它确实直接签出一个提交 SHA1,而不是一个分支HEAD

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

您的构建脚本可以首先尝试查找相关提交来自哪个分支


正如 OP milkplus通过查看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>

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

GIT_BRANCH选择多个分支进行构建时未设置

When trying to identify what branch the current build are on, I found that the GIT_BRANCHenvironment variable is not set when more then a single branch is selected to be built.

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

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

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

有点像这里描述的 NPE

替代文字

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

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

于 2010-10-04T19:52:05.483 回答
2

谢谢你,非常感谢分享这个解决方案!

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

在此处输入图像描述在此处输入图像描述

于 2015-01-20T01:28:12.410 回答