cruisecontrol.net - 共享代码库和巡航控制测试

标签 cruisecontrol.net shared-libraries

我有 2 个应用程序共享一个公共(public)库。应用程序和库都在积极开发中。这两个应用程序都将项目文件包含在其解决方案中。

这些文件夹在源代码管理中的布局如下:

Root
  App1
  App2
  Library

我们目前将单独的巡航控制build设置为在文件提交到 app1、app2 或库文件夹层次结构时随时运行。成功构建 Library 将触发 app1 和 app2 的构建。

在大多数情况下,这效果很好;问题是当有人对 Library 和 App1(或 app2)进行更改时。这通常是由于实现的功能需要修改/添加要实现的库中的某些内容而发生的。发生这种情况时,构建 Library(Library\foo.cs 中的更改)和 App1(app1\bar.cs 中的更改)的触发器将激活。两者都会看到文件 Base\Library\foo.cs 已更改并尝试重建库。只有一个会成功,因为开始为 Library 写入目标文件的火将获得独占文件锁;第二个立即失败。这种情况已经发生过好几次,迫使某人进入并手动重新运行由于锁定而失败的构建。

为了尝试降低再次发生这种情况的风险,我们更改了每个触发器的轮询间隔,以便将它们设置为不同的值,以尝试避免同时触发两次。它仍然不完美,因为 Library 和 AppN 之间的循环将每隔 N*M 秒同时发生一次(N 和 M 分别是轮询间隔)。

是否有更优雅或不太可能失败的解决方案可用?

最佳答案

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

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

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

关于cruisecontrol.net - 共享代码库和巡航控制测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118837/

相关文章:

c++ - 如何处理全局通用框架的不稳定 API

perl - 如何找到模块名称到不透明指针的 DynaLoader 映射?

c++ - 在共享库和 main 之间共享全局数据

android - 在 Android Studio 中使用带有版本控制的共享库链接

cruisecontrol.net - 使用 Ant for CruiseControl.NET 配置计划 block 时检测到未使用的节点

.net - ProtectedData.Unprotect 方法解密失败

cruisecontrol.net - 配置 CC.NET 电子邮件通知并在仪表板中显示错误日志

CruiseControl.Net 从控制台切换到服务

git - 从 MSBuild 获取 Git Long Hash

linux - .so在linux下注入(inject): how to locate address of dlopen()?