Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Visual Studio测试任务尝试发布结果时,TFS 2017陷入困境_Tfs_Tfsbuild_Vstest - Fatal编程技术网

当Visual Studio测试任务尝试发布结果时,TFS 2017陷入困境

当Visual Studio测试任务尝试发布结果时,TFS 2017陷入困境,tfs,tfsbuild,vstest,Tfs,Tfsbuild,Vstest,我们有一个TFS 2017构建代理执行Visual Studio测试任务来执行单元测试。这已经很好地工作了好几年,但是突然之间——没有任何代码更改——任务被卡住了 所有的测试都已经运行完毕,我们看到了摘要信息,它将位于它通常会发布结果的位置。。。但是什么也没发生。我们等了12个多小时才完成。这一步通常需要90分钟左右 我已经确认正在创建TRX文件。它的大小大约为4MB。我们正在进行3000多个单元测试 我也尝试过在测试任务中禁用代码覆盖率和附件上传,但似乎没有什么不同 下面是步骤卡住时日志输出的

我们有一个TFS 2017构建代理执行Visual Studio测试任务来执行单元测试。这已经很好地工作了好几年,但是突然之间——没有任何代码更改——任务被卡住了

所有的测试都已经运行完毕,我们看到了摘要信息,它将位于它通常会发布结果的位置。。。但是什么也没发生。我们等了12个多小时才完成。这一步通常需要90分钟左右

我已经确认正在创建TRX文件。它的大小大约为4MB。我们正在进行3000多个单元测试

我也尝试过在测试任务中禁用代码覆盖率和附件上传,但似乎没有什么不同

下面是步骤卡住时日志输出的屏幕盖

最后,我们在这台服务器上还有很多其他项目,它们的测试运行/发布良好,同样的构建的TFS版本也运行测试(集成/系统测试),这些测试可以正常工作

更新:我们在另一个构建服务器上运行了这个构建,它正确地发布了测试。这意味着这个特定的构建服务器有问题

更新2:所以我不再确定这里发生了什么。我们遇到问题的原始构建服务器现在工作正常,没有任何更改。刚刚又开始工作了。另一个生成服务器正在工作,然后停止。同样的问题。我将3000多个测试分为两个步骤,大约是50/50,这成功了好几次,但现在没有。因此,这似乎与服务器无关,也与测试的数量无关。调试日志记录没有提供任何有用的功能,因为在生成TRX文件后停止执行任何操作之前,一切似乎都正常


更新3:嗯,这又发生了。我不知道如何进行。我甚至试着在构建框上使用Fiddler,看看我是否能捕捉到看起来很时髦的流量,但我期望看到的大部分流量我都没有。这就好像Fiddler并没有捕获到大量工作(比如源代码下载、报告进度或测试结果发布)。不是通过HTTP/HTTPS吗

建议您放弃此构建并再次触发它。以缩小此问题是否可以稳定复制的范围

根据您的描述,所有其他构建工作正常。几年来,它一直运作良好。所有测试都通过了,测试报告已经写好了,但是任务挂起了。请仔细检查是否有其他进程可能无法正常关闭

此外,使用另一个构建代理再次进行测试。同时尝试使用相同的设置创建一个新的构建定义,触发该定义,这可能会奏效


此外,您还可以进行故障排除。要做到这一点,只需添加一个名为system.debug的构建变量并将其值设置为“true”,这将包含一个更详细的日志信息。

由于我们正在运行的测试数量太多,很难确定这一点,但我能够将其缩小为启动ping.exe的测试:

[ExpectedException(typeof(TimeoutException))]
[TestMethod]
public void ProcessWillTimeout()
{
    const string command = "cmd";
    const string args = "/C ping 127.0.0.1 /t";

    var externalProcessService = new ExternalProcessService();
    externalProcessService.Execute(command, args, TimeSpan.FromMilliseconds(500));
}
无论出于何种原因,此测试都使conhost.exe和ping.exe处于“孤立”状态。由于未知原因,这些进程没有终止的事实阻止了测试将其结果发布回TFS。可能在某个地方有某种东西在等待某个过程完成,但这从未发生过

事实上,我们会在Task Manager和Process Explorer中看到一堆conhost.exe和ping.exe进程:

你会注意到那里的工具提示。。。“[打开过程出错]”。我甚至不能使用Process Explorer终止这些进程,尽管Task Manager可以。果然,当我杀死它们时,TFS构建任务将立即恢复并完成结果发布


因此,我们正在测试的ExternalProcessService代码中显然存在某种缺陷(尽管有一个finally块终止了该过程),但我们至少能够让我们的构建测试重新运行,而不会出现问题。

对于这个特定的构建定义,这种情况会重复发生(从它开始发生以来的100%)。当我说其他构建工作正常时,我指的是其他构建定义。我将尝试详细日志记录。谢谢。不幸的是,添加详细日志并没有给我任何额外的细节。最后一个日志条目仍然是“结果文件:E:\agent2017\u work\1\s\TestResults\…”,然后它就放在那里。我正在尝试一个新的生成服务器。@RMD
我们在另一个生成服务器上运行了这个生成,它正确地发布了测试。这意味着这个特定的构建服务器有问题…
首先,您可以将环境与两个构建服务器进行比较,例如VS版本等等。如果它以前工作正常,请检查以前是否有更新或更改的内容,同时检查包含build agent文件夹的本地磁盘空间。此外,您还可以重新配置生成代理并再次测试。我复制了一份生成定义,但生成仍然无法在此服务器上发布测试。然后,我将测试数量减少了一半左右,它开始工作。这表明问题的原因在于测试的数量。正如我提到的,我们有3000多个tests@RMD那么问题应该与您的环境有关,可能是安装了两件多的东西,或者是构建服务器的硬件过载。这可以很好地解释为什么其他构建服务器可以工作,而这个特定的构建服务器已经工作了好几年,但是突然之间事情就卡住了。你的agent/_diag文件夹下的日志中是否有错误?@eddichen MSFT不幸的是,这里的日志似乎没有什么用处。日志显示了一个条目“[2018-07-11 01:00:47Z INFO JobServerQueue]尝试添加1批web控制台行,成功率:1/1。”并且在13小时内什么都没有,直到我结束构建/测试,这时我看到了