【问题标题】:Shared code libraries and cruise control testing共享代码库和巡航控制测试
【发布时间】: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


【解决方案1】:

是的。我相信您想将所有 3 个项目放在同一个队列中。这将防止项目同时构建。

您需要在 CCNet.Config 文件中添加类似的内容:

<project name="Library" queue="Q1" queuePriority="1">
<project name="App1" queue="Q1" queuePriority="2">
<project name="App2" queue="Q1" queuePriority="3">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多