Jenkins是否吞下了MojoFailureException?

时间:2016-03-02 16:01:24

标签: java maven jenkins maven-surefire-plugin

我已经使用参数

配置了maven surefire插件
<configuration>
  <forkedProcessTimeoutInSeconds>60</forkedProcessTimeoutInSeconds>
</configuration>

因此,当测试工作超过60秒时,surefire插件会中断它。

当我使用mvn testmvn install时,一切都在我的本地计算机上完美运行,但是当我尝试在Jenkins上构建项目时,它只是吞下异常,写入日志[ERROR] There was a timeout or other error in the fork并继续建立。结果我收到Finished: SUCCESS消息。

问题:有人有这个问题吗?有谁知道任何解决方案?

1 个答案:

答案 0 :(得分:1)

maven本地版本和Jenkins maven作业的默认选项之间的一个重要区别是,本地Maven Surefire插件的maven.test.failure.ignore选项设置为false(合理),以便测试失败将也失败了。

来自official documentation

  

将此设置为&#34; true&#34;在测试期间忽略失败。它的使用不推荐,但偶尔也很方便。

但是,Maven Jenkins作业将始终运行为true设置相同的选项,因此即使测试失败也会使Maven构建成功,并将Jenkins作业的状态转换为UNSTABLE(和不是SUCCESSFULFAILED,这可能确实是一个争论点。)

官方Jenkins问题ticket

中也记录了此行为
  

遵循Jenkins术语,当(surefire或failafe)测试失败时,Jenkins构建状态必须是不稳定的:
  &LT;&LT;如果构建成功并且一个或多个发布者报告它不稳定,则构建不稳定。例如,如果配置了JUnit发布者并且测试失败,则构建将标记为不稳定。 &GT;&GT;

因此,在Maven Jenkins工作中,如果测试失败:

  • Maven构建版本为SUCCESSFUL
  • Jenkins build UNSTABLE

相反,在执行Maven的自由式Jenkins作业中,如果测试失败:

  • Maven构建版本为FAILED
  • Jenkins build FAILED

可能的解决方案:

  • 将构建更改为运行maven的自由式Jenkins作业(虽然可能工作量太大)或
  • -Dmaven.test.failure.ignore=false选项添加到您的构建中(但是,您不再需要构建UNSTABLE)。