【问题标题】:Active Git branch is "(no branch)" on hudson CI活动 Git 分支在 hudson CI 上是“(无分支)”
【发布时间】:2011-04-20 23:44:39
【问题描述】:

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

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

【问题讨论】:

  • github.com/hudson/Hudson-GIT-plugin/blob/master/src/main/java/… 我发现 Hudson 的 Git SCM 插件覆盖了 buildEnvVars() 方法来设置 GIT_BRANCH 环境变量,但它没有通过 GIT_BRANCH = ${env.GIT_BRANCH}
  • 好点子,我已将其整合到我的答案中,以及对可能解释您当前情况的问题的参考。
  • issues.hudson-ci.org/browse/HUDSON-6856 似乎暗示 hudson 上的分离分支问题可能已修复。我将确保我拥有最新版本的 hudson 和 git 插件。
  • 好点,我已经在我的回答中包含了那个问题参考。我还将包括您的测试结果(我想是 Hudson 1.379)

标签: git hudson git-checkout


【解决方案1】:

已解决

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

  • 使用 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 存储库。

【讨论】:

【解决方案2】:

注意: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


作为通过查看source code of the Hudson Git Plugin实现的OP milkplus

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 987654338 @ 4987654338 @环境变量,然后选择单个分支构建。

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

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

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

类似于NPE described here

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

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

【讨论】:

  • 这就是问题所在。我不知道如何找到触发 Hudson 构建的分支名称。
  • @milkplus:但我提到的链接应该包含各种脚本(包括我的答案中的what-branch 脚本),以找出分支名称。
【解决方案3】:

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

我很难找到这个可选对话框来设置本地分支 - 并向其他人展示这也是 2015 年的当前方法,我想附上一些 jenkins 当前 gui 对话框的屏幕截图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2021-07-05
    • 2014-09-08
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多