如何在CruiseControl.Net中协调多个构建?

时间:2009-03-12 03:22:59

标签: cruisecontrol.net

我有一个场景,我需要定义多个msbuild任务。我添加了一个projectTrigger,但问题是你需要指定triggerStatus成功或失败。无论前面的构建是成功还是失败,我都需要进行构建。对此最好的解决方案是什么?

4 个答案:

答案 0 :(得分:1)

我可以想到两个选择。正如Pedro所提到的,您可以设置multiple triggers - 一个用于ProjectA的成功,一个用于失败。那么,在你的ProjectB下:

<multiTrigger operator="Or">
    <triggers>
        <projectTrigger project="ProjectA">
            <triggerStatus>Success</triggerStatus>
        </projectTrigger>
    </triggers>
    <triggers>
        <projectTrigger project="ProjectA">
            <triggerStatus>Failure</triggerStatus>
        </projectTrigger>
    </triggers>
</multiTrigger>

另一种方法是从另一个方向:使用Force Build Publisher。您可以让ProjectA强制构建:

,而不是在ProjectB中设置触发器
<publishers>
    <!-- other publishers... -->
    <forcebuild>
        <project>ProjectB</project>
        <integrationStatus>Success</integrationStatus>
    </forcebuild>
    <forcebuild>
        <project>ProjectB</project>
        <integrationStatus>Failure</integrationStatus>
    </forcebuild>
</publishers>

你必须定义两个案例(成功和失败),这有点不可思议。我还没有研究过是否有更好的方法。

答案 1 :(得分:1)

多个触发器是一个好主意,但是当我使用上面的语法实现它时,它不起作用。以下是适合我的代码:

<triggers>
<multiTrigger operator="Or">
    <triggers>
        <projectTrigger project="ProjectA">
            <triggerStatus>Success</triggerStatus>
        </projectTrigger>

        <projectTrigger project="ProjectA">
            <triggerStatus>Failure</triggerStatus>
        </projectTrigger>
    </triggers>
</multiTrigger>
</triggers>

答案 2 :(得分:0)

如果它们都涉及相同的代码库(即使它提供了比您真正需要的更多的代码,也要创建您正在监视的文件夹),这样一来,当修改发生时,它们都将启动,您将看到成功/失败每一个人。您可以按队列优先级设置顺序。

或者您是在单个项目中谈到多个MSBuild?如果是这样,我想到的唯一方法是将你的第一个构建放在任务中,而将其他人放在publishers部分(是的,你可以这样做)这是确保以下任务得到满足的唯一方法如果主要构建失败或失败。这样做的问题是发布者部分中的那些如果失败就不会使整个构建失败。

或者......您可以创建一个按顺序调用所有构建的主MSBuild ....

答案 3 :(得分:0)

CC.Net允许您在单个项目上定义多个触发器。也许您创建了两个项目触发器 - 一个用于成功,一个用于失败。