【问题标题】:How to configure CruiseControl.net to build co-dependent projects?如何配置 CruiseControl.net 来构建相互依赖的项目?
【发布时间】:2009-11-05 20:21:43
【问题描述】:

例如:

我要构建项目 A。项目 A 依赖于项目 B 和项目 C。

编辑: 每个项目在 SVN 中都有自己的主干: [存储库]/ProjectA/trunk [存储库]/ProjectB/trunk [存储库]/ProjectC/trunk

我的问题有几个部分:

  1. CCNET 实现这种“依赖”构建的方法/配置是什么?
  2. 我应该如何配置项目以便构建项目 B 或 C,然后触发项目 A 的构建?
  3. 随着每个项目获得依赖关系,扩展构建过程的可扩展方法/配置是什么?

我是 CCNET 的新手,所以如果有一些基本概念,请不要假设我知道它们。细节是我的朋友:-D

编辑: 我使用 SVN 作为我的源代码控制提供程序。

【问题讨论】:

  • 您能否为这些项目添加更多关于您的颠覆结构的详细信息?所有项目都在一个主干下还是有不同的存储库?
  • 感谢 Jason 的提问,请参阅问题中的第一个编辑。

标签: cruisecontrol.net


【解决方案1】:

您可以在 ProjectB 构建成功后使用Project Trigger 启动 ProjectA,如下所示:

<project name="ProjectA">
    <triggers>
        <projectTrigger project="ProjectB">
            <triggerStatus>Success</triggerStatus>
            <innerTrigger type="intervalTrigger"
                          seconds="60"
                          buildCondition="ForceBuild" />
        </projectTrigger>
    </triggers>
    ...
</project>

这会每 60 秒轮询一次 ProjectB 的构建结果,如果有新的成功构建,则会触发 ProjectA。默认情况下,它将在同一个 CCNET 服务器上查找项目,但您可以使用 serverUri 属性将其指向另一个项目。如果您还希望在其 Subversion 存储库更新时构建 ProjectA,则可以为 ProjectA 添加另一个触发器。

如果您在同一台服务器上运行构建,如果它们可能以任何方式相互干扰,您可以将它们放在同一个队列中,否则您可以让它们同时构建。

【讨论】:

  • 这似乎正是我所需要的。我会插上电源,看看效果如何。
【解决方案2】:

我已经建立了一个包含大约 20 个解决方案的构建系统,也许还有 100 个使用 NAnt 脚本和 CCNet 作为构建引擎的项目。为了处理解决方案之间的依赖关系,我使用了基于 Java 的工具 Ivy

Ivy 使用二进制依赖项,其中依赖项使用版本信息限定。编译的输出存储在二进制存储库中,即文件系统或什至 in subversion。编译时将二进制依赖项下载到文件系统中。

这种方法适用于具有相对松散耦合的模块(由 MS 解决方案表示)的项目,这些模块相对独立地发展。对于像您这样的设置,每个项目/解决方案都有一个单独的主干,项目/解决方案确实需要松散耦合,否则随着系统变得越来越大,您会发现自己做了大量的标记和分支。

如果您需要在项目之间建立更紧密的耦合,我建议您将它们移动到同一个主干。

注意:Ivy 必须作为命令行可执行文件调用,并且您无法获得良好的 Java Ant 集成。

【讨论】:

  • 将项目移动到同一个主干是理想的,但我希望灵活地将它们组织在存储库中。在构建过程中,我假设在工作目录中构建解决方案的目录结构可以将项目编译在一起?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 2014-11-28
  • 2011-05-30
相关资源
最近更新 更多