sbt 忽略测试失败

sbt ignore test failures

对于 Jenkins 中的 SonarQube 作业,我们希望继续,即使某些测试可能会失败。目前 Sonar Runner 没有启动,因为测试失败。 在 Maven 中,您只需添加 -DtestFailureIgnore = true,但我找不到 SBT 的任何类似内容。

我确实为 sbt 找到了一个 onFailure 的东西,但是没有在任何地方找到如何使用它的例子。这可以用来忽略测试失败,以便构建作业继续进行,以便 Sonar Runner 在之后启动吗?

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

终于自己找到了解决办法。

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

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

// 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 帮助我解决了我的问题。