【问题标题】:Once a build fails in TFS 2010, all builds after it on the same agent fail until the service is restarted一旦 TFS 2010 中的构建失败,在同一代理上的所有构建都会失败,直到重新启动服务
【发布时间】:2014-12-18 17:25:16
【问题描述】:

这是我之前的一个问题的扩展,我在这里发布了这个问题:VB.Net Method appears to be called multiple times when it actually isn't, and returns inconsistent results

当时我以为问题已经完全解决,但后来我才知道存在多个问题。我已经解决了代码和逻辑的所有问题,现在我已经缩小了最后一个问题的范围。

构建将运行得非常好,直到一个合法地失败。在那之后,该特定代理上的所有构建都将失败,即使后续构建没有实际错误也是如此。当它们失败时,我看到的症状与我在另一个线程中所做的完全相同,我将在这里总结:

  • 构建消息证明,只调用一次的方法似乎被多次调用
  • 构建消息将显示有 1 个错误,但该方法生成的日志中没有错误(将错误写入日志的行紧跟在将错误添加到结果日志的行之后,在同一个 if 语句中)
  • 在构建服务器上重新启动构建服务“修复”问题,直到下一次构建合法失败,此时循环再次开始

构建服务器设置:

  • Windows Server 2008 R2
  • VS 2010 高级版
  • 构建使用自定义库
  • 有 4 个构建代理,每个环境(Dev、QA、UAT、Prod)各一个

构建和部署自定义库是使用 .Net Framework 4.5 用 VB 编写的,它还调用另一个使用 .Net Framework 4.5 编写的库。

构建模板不使用 msbuild。严格来说,WF 已被精简到最低限度,只调用命令行程序(如 robocopy)或自定义 .net 类。

我已验证,如果某个代理(例如 Dev)的构建失败,那么使用该代理的所有构建都将失败。发生这种情况时,只有在该特定代理上运行的构建才会失败,其他代理运行得很好。我还没有机会测试只是重新启动代理是否会“修复”它,或者我是否必须重新启动整个服务。

我已尝试为运行构建的用户帐户清除 Visual Studio 缓存,但这根本没有帮助。我还设计了一个 GUI 界面,它与构建执行所有相同的操作,并使用所有相同的代码,但我无法让它重复该行为。

我已经按照这些步骤在构建控制器上启用了日志:How to enable build agent or build controller’s logs? 但是当这个问题发生时他们没有帮助(没有记录错误,日志中没有什么不同的构建与那些被窃听)

我不确定我的下一个故障排除步骤应该是什么,我知道问题不在于我的代码,而且我没有运气通过 Google、MSDN、StackOverflow 搜索互联网或挑选我的大脑其他组织的同行。

我想知道这是否可能是由于在 TFS 2010 构建中运行需要 .Net Framework 4.5 的代码导致的错误,因为它仅正式支持最高 4.0。

【问题讨论】:

  • 我想我会在几年后跟进这个问题:这个问题从未得到解决,但我怀疑这是由于错误造成的。我们能够在我们的生产和测试环境中一致地复制这种行为。我们验证了 TFS2012+ 构建服务在没有对工作流程进行其他更改的情况下不会出现这种行为。

标签: vb.net build workflow-foundation


【解决方案1】:

我的建议是将构建记录器更改为诊断并查看输出,肯定有一些垃圾被添加到环境中。

你可以用这样的开关来做到这一点

/l:FileLogger,Microsoft.Build.Engine;logfile=c:\build.log;Verbosity=Diagnostic

你可能想看看here

【讨论】:

  • 你能说得更具体一点吗,那个开关在哪里?此外,在构建本身中打开任何类型的日志记录的问题并没有解决问题。它导致自定义类中的代码吓坏了。由于我们的变更控制流程,很难尝试放入调试代码
  • 感谢您的澄清,但这在这种情况下无济于事。构建模板不使用 msbuild。严格来说,WF 已被精简到最低限度,只调用命令行程序(如 robocopy)或自定义 .net 类。我应该对此更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2011-01-15
相关资源
最近更新 更多