TFS 2013构建源设置都共享相同的目录,并且产生错误

时间:2017-07-24 16:44:12

标签: tfsbuild tfs2013

我们有许多相互依赖的构建(例如,构建A必须在构建B之前运行,因为构建B引用在构建A中创建的.dll),因此在每个构建的源设置中,我们对构建进行硬编码代理文件夹。它不能是默认的$(SystemDrive)\ Builds \ $(BuildAgentId)\ $(BuildDefinitionPath),因为后续版本不知道从哪里获取源代码。但是现在我已经设置了CI版本,而且我经常收到错误:

Exception Message: Unable to create the workspace '106_33_pgbuildorig' due to 
a mapping conflict. You may need to manually delete an old workspace.

我最初尝试将CI构建设置为使用不同的文件夹,但事实证明我们需要它们也在同一个文件夹中,因为我们希望在后续的其他构建中从CI构建中获取最新的输出。

我是如何避免不得不经常手动删除Team Build创建的工作区的?

实际上我不知道这些构建最初是如何工作的(我刚刚开始在这里工作),因为看起来硬编码源设置会导致创建重叠的工作空间并且无论如何都会在下次运行时失败

1 个答案:

答案 0 :(得分:1)

你应该停止拥有这样依赖彼此的构建。除了您遇到的明显问题之外,它只是一种普遍不好的做法,因为它会导致构建生成不一定表现一致的二进制文件。如果我重新编译旧的源代码,我应该得到表现出相同行为的输出。如果您依赖于外部生成的不断变化的二进制文件,则无法保证这一点。你甚至不能保证旧代码会被编译。

使得构建基础架构有效地扩展到单个构建代理之外也很困难(接近不可能)。

更好的解决方案取决于您的情况,但粗略地说:

  • 如果您执行此操作的原因是因为您有多个应用程序都依赖于一组共享组件,使用NuGet包在需要使用的不同应用程序之间共享版本化二进制文件那些二进制文件。
  • 如果原因在于构建速度(它是一个很大的应用程序,并且您不希望在Y更改时重建X + Y),使用NuGet包
  • 如果以上都不是,只是一次构建一切