【发布时间】:2010-01-23 00:52:42
【问题描述】:
我有 2 个应用程序共享一个公共库。应用程序和库都在积极开发中。两个应用都在其解决方案中包含项目文件。
这些文件夹在源代码管理中的布局如下:
Root
App1
App2
Library
我们目前有单独的巡航控制构建设置为在文件提交到 app1、app2 或库文件夹层次结构时运行。成功构建库将触发 app1 和 app2 的构建。
在大多数情况下,这很有效;问题是当有人同时对库和 App1(或 app2)进行更改时。这通常是由于实现的功能需要修改/添加到要实现的库中的某些内容而发生的。发生这种情况时,用于构建库(Library\foo.cs 中的更改)和 App1(app1\bar.cs 中的更改)的触发器将被激活。两者都将看到文件 Base\Library\foo.cs 已更改并尝试重建库。只有一个会成功,因为开始为库写入目标文件的火将获得排他文件锁;第二个立即失败。这种情况已经发生了好几次,迫使某人进入并手动重新运行由于锁定而失败的构建。
为了尝试降低再次发生这种情况的风险,我们更改了每个触发器的轮询间隔,以便将它们设置为不同的值,以避免同时触发两个触发器。它仍然不完美,因为 Library 和 AppN 之间的循环将每 N*M 秒同时发生一次(N 和 M 是各自的轮询间隔)。
是否有更优雅或更不可能失败的解决方案可用?
【问题讨论】:
-
很高兴我的回答对你有用。组队!
标签: cruisecontrol.net shared-libraries