为什么Teamcity发送键盘中断来杀死我的构建?

时间:2019-06-12 15:11:35

标签: teamcity integration-testing interrupt keyboardinterrupt control-c

我有一个在TeamCity中运行的构建,只有一个构建步骤:启动BAT文件。 TeamCity有时会通过(两次)键盘中断杀死我的版本,我也不知道为什么。构建结束时的输出如下所示:

Running build failed.
Error:
NUnit test failed (7).
Starting BuildFailureTarget: recover
Uninstalling service under test..Terminate batch job (Y/N)? 
^C
Process exited with code -1073741510

在安装Windows服务和SQL数据库之后,此版本通过NUnit运行一些集成测试。如果任何测试失败,则构建脚本(使用FAKE和F#的Make)将进行一些清理-卸载服务,拆除数据库。与构建通过时运行的清除代码相同,只是目标名称不同(recover)。似乎TeamCity仅在某些测试失败时才终止构建。我应注意,消息“正在卸载正在测试的服务”来自运行卸载程序的子进程。即使我们关闭了几种失败条件,以至于在几次测试失败之后构建(虚假地)通过(我们没有使用Java,因此我们认为其中一个无关紧要),这种情况仍然会发生:

even with build failure conditions turned off

我不知道为什么TeamCity在完成之前会杀死我的构建。我如何找出导致TeamCity发出此中断的原因?

1 个答案:

答案 0 :(得分:1)

如果TeamCity检测到悬空的过程,似乎会执行此操作(不确定如何对此进行更精确的确定)。我们正在发生的事情是,在我们运行子流程时,第三方库引发了异常,该异常发生在停止该流程的代码之前。异常已得到处理,并且由异常触发的清理将导致流程无论如何都被关闭(通过另一种方式),但是在清理完成之前,TeamCity正在终止我们的构建:具有讽刺意味的是,该流程永远不会确实被关闭了。

我们的解决方案是捕获异常并确保在失败之前调用第一个关闭代码。最终,我们无法从TeamCity方面更清楚地了解正在发生的事情:我们是通过仔细分析代码来发现错误的。但是,似乎在子流程的标准清理逻辑失败时会发生这种情况。