我刚刚尝试过Jenkins并设置了一些项目。一个特别是调用shell脚本,并且正确地拾取该脚本的退出代码,从而产生通过/失败。然而,当我从命令行调用Scala时,无论发生什么,它都会通过。
在执行shell框中:
/opt/scala/2.9.1/bin/scala sdfsdfsd
Exception in thread "main" java.lang.RuntimeException:
Cannot figure out how to run target: sdfsdfsd
... (stack trace removed)
Finished: SUCCESS
然而,与Java相同的做法会导致失败:
/opt/java/jdk1.7.0/bin/java sdfdfsd
Error: Could not find or load main class sdfdfsd
Finished: FAILURE
当从bash(使用echo $?)
运行时,这两个都会产生退出代码1我错过了什么或这是一个错误吗?
编辑:
有趣的是,我在使用ant exec时看到了相同的行为 - 当我调用包含对scala的无效调用的shell脚本时,我得到了预期的错误代码,但是通过ant(使用failonerror ='true')我看到零和建立成功。
由于
答案 0 :(得分:6)
这是一个已知的错误Scala eats exit code when piping stdin,已在主干中修复。
要修补系统,修复非常简单,在$ SCALA_HOME / bin / scala脚本中,第25行
function onExit() {
if [[ "$saved_stty" != "" ]]; then
restoreSttySettings
exit $scala_exit_status
fi
}
将出口移至if:
之外function onExit() {
if [[ "$saved_stty" != "" ]]; then
restoreSttySettings
fi
exit $scala_exit_status
}
这将解决你的问题(实际上也是在ant中,但你必须为scalac做同样的事情)。