如何配置CruiseControl.net来构建共同依赖的项目?

时间:2009-11-05 20:21:43

标签: cruisecontrol.net

For Instance:

我想建立项目A.项目A取决于项目B和项目C.

修改 每个项目在SVN中都有自己的主干: [储存库] /项目A /中继线 [储存库] /项目B /中继线 [储存库] /项目C /中继线

我的问题有几个部分:

  1. CCNET实现这种“依赖”构建的方法/配置是什么?
  2. 如何配置项目以便构建项目B或C,然后触发项目A的构建?
  3. 当每个项目获得依赖关系时,扩展构建过程的可扩展方法/配置是什么?
  4. 我是CCNET的新手,所以如果有一些基本概念,请不要认为我知道它们。细节是我的朋友:-D

    修改 我正在使用SVN作为我的源代码控制提供商。

2 个答案:

答案 0 :(得分:10)

成功构建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添加另一个触发器。

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

答案 1 :(得分:3)

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

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

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

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

注意:Ivy必须被称为命令行可执行文件,并且您没有获得良好的Java Ant集成。