问题 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邮件列表中发现了两个没有答案的问题,可能有助于解决这个问题:


4842
2017-12-22 19:55


起源

我也有问题让Hudson汇总测试结果。可悲的是,用户邮件列表对此没有反应。你在使用自由式工作还是maven2? - Joshua McKinnon
自由式工作。我还在邮件列表上发现了两个没有回复的问题。我注意到其中一个是你的:)。 - Rob Hruska


答案:


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

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

不幸的是,即使在1.287中,Drill Down链接仍然存在问题。从Foo开始,如上所述,当您深入查看Foo-Tests时,您将看到格式错误的URL,看起来像 HTTP://本地主机:8080 /哈德森-1.287job /美孚,测试/。您必须手动修改该URL以在hudson上下文和后面的作业路径之间插入/,以使其看起来像 HTTP://本地主机:8080 /哈德森-1.287 /工作/富-测试/。然后,您将能够实际看到下游测试结果。

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

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


3
2018-02-28 18:24



谢谢你的回答,这非常好。我明天有机会试一试。 - Rob Hruska
没问题。如果我在源中找到错误的位置,我会再次发表评论。 - John Ellinwood
这对我来说不太合适。但是,我认为这个答案足以让大多数人遇到这个问题。此外,对已经开放的JIRA问题的引用是一个很好的外部参考,以便密切关注。我会说这个被接受了。谢谢你的帮助。 - Rob Hruska


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

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


5
2017-09-24 21:45





我在Hudson 1.288修复了丢失的'/'问题

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

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


2
2018-03-08 05:42





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

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

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

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


2
2017-11-03 15:42



Ingvald,你能澄清一下,是不是必须这样做 相同 文件或具有相同内容的文件?让哈德森为此使用一个共同的工作空间并在两个工作之间分享它是一个好主意吗? - Artem
Artem,它必须是同一个文件,是的,不仅仅是相同的内容。首先,共享工作区是一个好主意,尤其是因为您节省了从SCM系统更新的时间(当您将CI系统升级到自己的计算机或添加从属服务器时这不是问题)。 con:构建失败与特定提交之间的直接关系较少,f.ex。如果您要向导致构建失败的开发人员发送电子邮件。 - Ingvald