3

我在 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,所以我们假设一个无关紧要),这种情况仍然会发生:

即使关闭了构建失败条件

我无法弄清楚为什么 TeamCity 在完成之前就杀死了我的构建。如何找出导致 TeamCity 发出此中断的原因?

4

1 回答 1

1

如果 TeamCity 检测到悬空进程(不确定如何更精确),它似乎会这样做。我们所发生的事情是,在我们运行子进程时,第三方库抛出了异常,而在停止该进程的代码之前。异常已处理,由异常触发的清理将导致进程关闭(通过另一种方式),但在清理完成之前,TeamCity 正在杀死我们的构建:具有讽刺意味的是,该进程永远不会确实被关闭了。

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

于 2019-06-20T18:21:51.823 回答