Jenkins 会吞下 MojoFailureException 吗?

Does Jenkins swallow MojoFailureException?

我已经使用参数配置了 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 消息。

问题:有人遇到过这个问题吗?有人知道解决办法吗?

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

来自 official documentation:

Set this to "true" to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on occasion.

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

Jenkins 官方问题中也记录了此行为 ticket

Following the Jenkins Terminology, when (surefire or failsafe) tests fail, the Jenkins build status must be UNSTABLE:
<< A build is unstable if it was built successfully and one or more publishers report it unstable. For example if the JUnit publisher is configured and a test fails then the build will be marked unstable. >>

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

  • Maven 构建是 SUCCESSFUL
  • Jenkins 构建是 UNSTABLE

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

  • Maven 构建是 FAILED
  • Jenkins 构建是 FAILED

可能的解决方案:

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