11

我的 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 报告视为幕后工件)。这导致了一个错误,因为我没有明确定义要发布的任何工件。

我正在使用哈德逊 1.266。

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

4

4 回答 4

5

我们正在使用 Hudson 版本。1.324 并且有类似的麻烦。尽管您提到您尝试启用指纹识别并且它对您不起作用,但它对我们有用。我们按照此处的说明进行操作:

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

于 2009-09-24T21:45:50.397 回答
3

我能够用 Hudson 1.266 复制您的问题。这是一个 Hudson 错误,已在以后的版本(1.287 之前)中修复,因此升级 Hudson 或使用此两次单击解决方法:从项目页面,首先转到最新版本,然后是聚合测试结果。

问题是 Foo 的项目页面仅显示最新测试结果链接,该链接的 URL 类似于http://localhost:8080/hudson-1.266/job/Foo/lastBuild/testReport/。由于 Foo 没有自己的测试,因此此链接没有可引用的 JUnit XML 文件并返回您提到的错误。当没有测试时,通过从 latestBuild/testReport/ 重定向到 latestBuild/ 来修复 1.266 和 1.287 之间的某个位置。您在 1.266 中的替代方案是,而不是单击项目页面中的最新测试结果,向下滚动一点并单击永久链接下的最新构建。这会将您带到 latestBuild/ URL,然后您可以从那里单击 Aggregated Test Result,其 URL 类似于http://localhost:8080/hudson-1.266/job/Foo/lastBuild/aggregatedTestReport/. 在此页面上,来自下游项目的所有测试结果都将在下钻部分下提供。

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

我还没有机会查看 Hudson 的源代码来查找错误,但是已经有一个问题可以解决。它的问题 1574,并且已经开放了将近一年。

顺便说一句,我真的很喜欢 Hudson 的 CI,但他们的界面并没有想象中的那么流畅。我期待他们在 ExtJS 中对 UI 的返工。也许这就是他们花费所有时间的原因。

于 2009-02-28T18:24:42.377 回答
2

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

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

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

于 2009-03-08T05:42:55.077 回答
2

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

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

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

after that, at least with hudson 1.330, things work - aggregated links, drilldown, etc.

于 2009-11-03T15:42:47.743 回答