代码之家  ›  专栏  ›  技术社区  ›  Achilles

如何配置CruiseControl.net以构建相互依赖的项目?

  •  8
  • Achilles  · 技术社区  · 15 年前

    例如:

    我想建立项目A。项目A依赖于项目B和项目C。

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

    我的问题有几个部分:

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

    我是ccnet的新手,所以如果有一些基本概念,请不要以为我知道它们。细节是我的朋友-d

    编辑: 我正在使用SVN作为源代码管理提供程序。

    2 回复  |  直到 15 年前
        1
  •  10
  •   GraemeF    15 年前

    你可以使用 Project Trigger 要在成功生成ProjectB时启动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 属性。如果还希望在更新ProjectA的Subversion存储库时为其生成触发器,则可以为其添加另一个触发器。

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

        2
  •  3
  •   Christoffer Soop    15 年前

    我已经建立了一个由大约20个解决方案和100个项目组成的构建系统,使用南特脚本和ccnet作为构建引擎。为了处理解决方案之间的依赖关系,我使用了基于Java的工具。 Ivy .

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

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

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

    注意:常春藤必须被称为命令行可执行文件,而您没有得到良好的Java ANT集成。