【问题标题】:sbt ignore test failuressbt 忽略测试失败
【发布时间】:2015-04-27 11:29:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: scala jenkins sbt sonarqube


    【解决方案1】:

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

    在 SBT 中,您可以定义一个新任务 A,该任务 A 捕获另一个任务 B 的结果。这种依赖关系确保任务 B 在新任务 A 启动时运行。通过捕获结果,任务 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,它帮助我解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2019-10-10
      相关资源
      最近更新 更多