我们有许多相互依赖的构建(例如,构建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创建的工作区的?
实际上我不知道这些构建最初是如何工作的(我刚刚开始在这里工作),因为看起来硬编码源设置会导致创建重叠的工作空间并且无论如何都会在下次运行时失败
答案 0 :(得分:1)
你应该停止拥有这样依赖彼此的构建。除了您遇到的明显问题之外,它只是一种普遍不好的做法,因为它会导致构建生成不一定表现一致的二进制文件。如果我重新编译旧的源代码,我应该得到表现出相同行为的输出。如果您依赖于外部生成的不断变化的二进制文件,则无法保证这一点。你甚至不能保证旧代码会被编译。
使得构建基础架构有效地扩展到单个构建代理之外也很困难(接近不可能)。
更好的解决方案取决于您的情况,但粗略地说: