我的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邮件列表中发现了两个没有答案的问题,可能有助于解决这个问题:
我能够用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。也许这就是他们所有时间都花在了他们身上的东西。
我在Hudson 1.288修复了丢失的'/'问题
使用聚合下游测试结果的关键是在两个作业上运行指纹识别。在这种情况下,那将是'Foo'和'Foo-tests'
Hudson通过查找具有相同指纹的文件来匹配构建与下游测试。所以这意味着你的指纹必须匹配。有点像犯罪现场。
这两个项目,Foo和Foo-Test,必须知道它们在同一个流上,因此它需要一个公共文件的指纹(并因此存档)。
我不得不选择一个在Foo和Foo-Test运行之间没有变化的文件,并且在两次运行之间仍然会改变。对我来说,这是一个不相关的临时.jar,由Foo在我的Foo和Foo-Test版本的自定义/通用工作空间中生成。
即,我必须让Foo和Foo-Test指纹同一个文件。
在那之后,至少在哈德森1.330,事情工作 - 聚合链接,钻取等。