如何设置SBT构建以在Jenkins的测试失败时返回零退出代码?

 谁的淡笑丶_227 发布于 2022-12-20 15:34

当我通过SBT在Jenkins中运行我的Specs2测试时,一旦测试失败,构建就会被标记为失败.由于Jenkins通常区分构建失败和测试失败,我想改变这一点.

我知道Jenkins的构建失败是由对SBT的调用的退出代码检测到的,一旦至少一个测试失败,它就会返回1.

有什么选择我假设我想避免改变我build.sbt(或一般的项目)只是为了解决这个不便?

不知何故,我认为应该可以将标准的sbt项目放入标准的Jenkins安装中并使其按预期工作.

1 个回答
  • tl; drtestResultLogger与自定义测试结果记录器一起使用,该记录器不会抛出TestsFailedException它而设置非0退出代码.

    只是注意到我错过了"避免更改的build.sbt要求.您可以使用任何其他*.sbt文件,说exitcodezero.sbt~/.sbt/0.13/default.sbt使用自定义testResultLogger.

    事实证明,由于SBT 0.13.5有办法有这样的行为-见增加设置"testResultLogger",它可以测试报告的定制,其中testResultLogger诞生了.

    > help testResultLogger
    Logs results after a test task completes.
    

    因为它可能已经在TestResultLogger.SilentWhenNoTests的实现中被读取,它是默认值testResultLogger:

    results.overall match {
      case TestResult.Error | TestResult.Failed => throw new TestsFailedException
      case TestResult.Passed                    =>
    }
    

    这意味着当执行测试时出现问题时,TestsFailedException会抛出异常,然后按以下方式报告异常:

    [error] Failed: Total 3, Failed 1, Errors 0, Passed 2
    [error] Failed tests:
    [error]         HelloWorldSpec
    [error] (test:test) sbt.TestsFailedException: Tests unsuccessful
    

    我的想法是无论执行测试的结果如何都禁用抛出异常.添加以下内容build.sbt并始终具有退出代码0:

    testResultLogger in (Test, test) := new TestResultLogger {
        import sbt.Tests._
        def run(log: Logger, results: Output, taskName: String): Unit = {
            println("Exit code always 0...as you wish")
            // uncomment to have the default behaviour back
            // TestResultLogger.SilentWhenNoTests.run(log, results, taskName)
        }
    }
    

    取消注释TestResultLogger.SilentWhenNoTests.run以恢复默认行为.

    ?  failing-tests-dont-break-build  xsbt test; echo $?
    JAVA_HOME=/Library/Java/JavaVirtualMachines/java8/Contents/Home
    SBT_OPTS= -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -Dfile.encoding=UTF-8
    [info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
    [info] Set current project to failing-tests-dont-break-build (in build file:/Users/jacek/sandbox/failing-tests-dont-break-build/)
    [info] HelloWorldSpec
    [info]
    [info] The 'Hello world' string should
    [info] x contain 11 characters
    [error]    'Hello world' doesn't have size 12 but size 11 (HelloWorldSpec.scala:7)
    [info]
    [info] + start with 'Hello'
    [info] + end with 'world'
    [info]
    [info] Total for specification HelloWorldSpec
    [info] Finished in 15 ms
    [info] 3 examples, 1 failure, 0 error
    Exit code always 0...as you wish
    [success] Total time: 1 s, completed Sep 19, 2014 9:58:09 PM
    0
    

    2022-12-20 15:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有