Hudson中“聚合下游测试结果”的问题

时间:2008-12-22 19:55:42

标签: continuous-integration hudson

我的Hudson项目似乎没有正确汇总下游测试结果,我想知道我是否错过了某个配置步骤。我有两个项目,Foo和Foo-Tests,这两个项目都是自由式工作。

在项目Foo上,我有以下配置:

  • 选中“汇总下游测试结果”。
  • 选中前一个选项下的“自动聚合所有下游测试”。
  • 选中“构建其他项目”并指定“Foo-Tests”进行构建。

在项目Foo-Tests上,我有以下配置:

  • 选中“发布JUnit测试结果报告”并指定我的JUnit报告XML文件。

当Foo构建时,它会成功构建并正确触发Foo-Tests构建。 Foo-Tests构建成功并正确发布JUnit报告。但是,当我在Foo中查找聚合测试结果时,会有一个“最新测试结果(无测试)”链接,用于将我发送到404。

以下是我尝试过的无法解决问题的内容:

  • 告诉Foo“没有参数发布JUnit测试结果报告”(项目Foo中没有测试,只有Foo-Tests)。这导致了一个错误,因为在项目中没有要处理的测试文件。
  • 告诉Foo-Tests“指纹所有已发布的工件”,没有参数(我想知道Hudson是否将JUnit报告视为幕后工件)。这导致了一个错误,因为我没有明确定义要发布的任何工件。

我正在使用Hudson 1.266。

编辑: 我应该注意到,我在Hudson Users邮件列表中发现了两个没有答案的问题,可能有助于解决这个问题:

4 个答案:

答案 0 :(得分:5)

我们正在使用Hudson ver。 1.324并遇到类似的麻烦。虽然您提到您尝试启用指纹识别并且它不适合您,但它确实适用于我们。我们按照此处的说明进行操作:

http://shotgunsandpenguins.blogspot.com/2009/07/how-to-aggregate-downstream-test.html

答案 1 :(得分:3)

我能用Hudson 1.266复制你的问题。这是一个Hudson错误,在以后的版本(1.287之前)中得到修复,因此要么升级Hudson,要么使用这个双击解决方法:从Project页面,先进入Latest Build,然后再进行聚合测试结果。

问题是Foo的Project页面只显示Latest Test Results链接,其中包含http://localhost:8080/hudson-1.266/job/Foo/lastBuild/testReport/之类的URL。由于Foo没有自己的测试,因此该链接没有要引用的JUnit XML文件,并返回您提到的错误。当没有测试时,通过从latestBuild / testReport / backre重定向到latestBuild /,将其修复到1.266和1.287之间。 1.266中的替代方法是,而不是单击“项目”页面中的“最新测试结果”,向下滚动一下,然后单击“永久链接”下的“最新版本”。这将带您进入latestBuild / URL,然后您可以单击Aggregated Test Result,其中包含http://localhost:8080/hudson-1.266/job/Foo/lastBuild/aggregatedTestReport/之类的URL。在此页面上,下游项目的所有测试结果都将在“向下钻取”部分下提供。

不幸的是,即使在1.287中,“向下钻取”链接仍然存在问题。从Foo开始,如上所述,当您深入到Foo-Tests时,您将看到格式错误的URL,其类似于http://localhost:8080/hudson-1.287job/Foo-Tests/。您必须手动修改该URL以在hudson上下文和其后的作业路径之间插入/,使其看起来像http://localhost:8080/ hudson-1.287 / job / Foo-Tests / 。然后,您将能够实际看到下游测试结果。

我没有机会透过哈德森来源查找错误,但已经有一个问题可以解决。它issue 1574,已开放近一年。

另一方面,我真的很喜欢Hudson的CI,但他们的界面并不尽如人意。我期待他们在ExtJS中重新编写UI。也许这就是他们花费的所有时间。

答案 2 :(得分:2)

我修复了Hudson 1.288中缺少的'/'问题

使用聚合下游测试结果的关键是在两个作业上运行指纹识别。在这种情况下,那将是'Foo'和'Foo-tests'

Hudson通过查找具有相同指纹的文件来匹配构建与下游测试。所以这意味着你的指纹必须匹配。有点像犯罪现场。

答案 3 :(得分:2)

这两个项目,Foo和Foo-Test,必须知道它们位于同一个流中,因此它需要指纹(并因此归档)一个公共文件。

我必须选择一个在Foo和Foo-Test运行之间没有变化的文件,并且在它们都运行之间仍然会改变。对我而言,这是Foo在我的Foo和Foo-Test版本的自定义/通用工作空间中生成的一个不相关的临时.jar。

即,我必须让Foo和Foo-Test指纹同一个文件。

之后,至少在哈德森1.330,事情有效 - 聚合链接,钻取等。