Jenkins 会吞下 MojoFailureException 吗?
Does Jenkins swallow MojoFailureException?
我已经使用参数配置了 maven surefire 插件:
<configuration>
<forkedProcessTimeoutInSeconds>60</forkedProcessTimeoutInSeconds>
</configuration>
所以当测试工作超过 60 秒时,surefire 插件会中断它。
当我使用 mvn test
或 mvn 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
(合理)以便测试失败也会使构建失败。
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
(而不是 SUCCESSFUL
或 FAILED
,这可能确实是一个争论点)。
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
构建)。
我已经使用参数配置了 maven surefire 插件:
<configuration>
<forkedProcessTimeoutInSeconds>60</forkedProcessTimeoutInSeconds>
</configuration>
所以当测试工作超过 60 秒时,surefire 插件会中断它。
当我使用 mvn test
或 mvn 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
(合理)以便测试失败也会使构建失败。
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
(而不是 SUCCESSFUL
或 FAILED
,这可能确实是一个争论点)。
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
构建)。