gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:51:26 25 4
gpt4 key购买 nike

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

我知道 Jenkins 中的构建失败是通过调用 SBT 的退出代码来检测的,只要至少一个测试失败,它就会返回 1。

假设我想避免更改我的 build.sbt (或一般项目)只是为了解决这个不便,我有哪些选项?

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

最佳答案

tl;drtestResultLogger 与自定义测试结果记录器一起使用,该记录器不会抛出 TestsFailedException 进而设置非 0 退出代码。

刚刚注意到我错过了这个要求“以避免更改 build.sbt。您可以使用任何其他 *.sbt 文件,例如exitcodezero.sbt~/.sbt/0.13/default.sbt 以及自定义 testResultLogger

事实证明,自从 sbt 0.13.5 以来,就有一种方法可以实现这种行为 - 请参阅 Added setting 'testResultLogger' which allows customisation of test reporting testResultLogger 诞生的地方。

> help testResultLogger
Logs results after a test task completes.

正如 the implementation of 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

关于jenkins - 如何设置 SBT 构建以在 Jenkins 测试失败时返回零退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com