sbt忽略测试失败

时间:2015-02-25 12:53:08

标签: scala jenkins sbt sonarqube

对于Jenkins的SonarQube工作,即使某些测试可能失败,我们还是要继续。目前Sonar Runner没有开始,因为测试失败了。 在Maven中,您只需添加-DtestFailureIgnore = true,但我找不到任何类似的SBT。

我确实为sbt找到了onFailure的东西,但是没有找到任何关于如何使用它的例子。这可以用来忽略测试失败,这样构建工作就会继续,所以Sonar Runner会在之后启动吗?

或者Jenkins中是否有设置忽略构建的结果? 我们使用' sbt clean cover test coverageReport'作为构建命令,并在构建后的步骤中使用Sonar Runner。

1 个答案:

答案 0 :(得分:5)

终于找到了解决方案。

在SBT中,您可以定义一个新任务A,它捕获另一个任务B的结果。此依赖关系确保在启动新任务A时运行任务B.通过捕获结果,任务B的结果不是任务A的结果,所以如果B失败,A不会(必须)失败。

所以在这种情况下,我添加了为'build.sbt'创建了一个新的'ciTests'任务

// Define a special test task which does not fail when any test fails,
// so sequential tasks (like SonarQube analysis) will be performed no matter the test result.
lazy val ciTests = taskKey[Unit]("Run tests for CI")

ciTests := {
  // Capture the test result
 val testResult = (test in Test).result.value
}

现在,在Jenkins工作中,它使用带命令的SBT构建项目(使用SCoverage SBT plugin):

update coverage ciTests coverageReport

此构建将成功忽略任何失败的测试。因此,启动SonarRunner的下一个构建步骤将开始分析Scala项目并将结果放入SonarQube。

感谢@ hugo-zwaal指导我this answer帮我解决了我的问题。