Java 当Scala失败时,Jenkins报告成功
我刚刚和詹金斯一起做了实验,并建立了一些项目。其中一个调用shell脚本,并从该脚本中正确提取退出代码,生成通过/失败。然而,当我从命令行调用Scala时,无论发生什么情况,它都会通过 在“执行外壳程序”框中:Java 当Scala失败时,Jenkins报告成功,java,scala,jenkins,Java,Scala,Jenkins,我刚刚和詹金斯一起做了实验,并建立了一些项目。其中一个调用shell脚本,并从该脚本中正确提取退出代码,生成通过/失败。然而,当我从命令行调用Scala时,无论发生什么情况,它都会通过 在“执行外壳程序”框中: /opt/scala/2.9.1/bin/scala sdfsdfsd Exception in thread "main" java.lang.RuntimeException: Cannot figure out how to run target: sdfsdfsd ... (s
/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')我看到零,并且构建成功
谢谢这是一个已知的bug,已在trunk中修复
要修补您的系统,修复非常简单,在$SCALA_HOME/bin/SCALA脚本第25ish行
function onExit() {
if [[ "$saved_stty" != "" ]]; then
restoreSttySettings
exit $scala_exit_status
fi
}
如果出现以下情况,请将出口移到外部:
function onExit() {
if [[ "$saved_stty" != "" ]]; then
restoreSttySettings
fi
exit $scala_exit_status
}
这将解决您的问题(实际上在ant中也是如此,但您必须对scalac执行相同的操作)。这些“…”是否表示正在执行其他命令?如果我没有完全误导,詹金斯只会拾取最后一个命令的退出代码,所以如果你的脚本中有另一个命令在Scala失败后执行,并且这个命令成功了,詹金斯仍然会认为这是成功的。这只是java/scala的附加堆栈跟踪/其他输出。您在Jenkins中的脚本中尝试过“echo$?”吗?如果你在bash和Jenkins身上做这件事可能会有所不同。此外,您可能还想尝试类似“if$?=”的内容1退出1'(是的,我试过了,bash打印了1(即失败),jenkins打印了0。但我不明白为什么?我想我只会使用ant exec,但似乎有些过火:)是的,这似乎有些过火;-)您可以尝试在jenkins脚本中加载bash,看看这是否会改变什么。除此之外,我还没有什么想法,对不起,你偶然发现了一些奇怪的东西;-)