如何在CruiseControl.Net中为项目配置两个不同的触发器?

时间:2011-08-18 03:59:37

标签: cruisecontrol.net

我想知道是否可以创建两个触发器,一个在文件系统上,另一个在同一个配置文件中用于svn checkout。 我尝试了以下内容:

a)已将触发器及其各自的文件系统,svn定义以及任务放在同一个文件中, 导致错误:它表示未使用的节点被检测到 例如:

<trigggers>
<intervalTrigger seconds="100" buildCondition="ForceBuild"/> 
<intervalTrigger seconds="300" buildCondition="IfModificationExists"/> 
</triggers>

<sourcecontrol type="filesystem">
  <repositoryRoot>...</repositoryRoot>
</sourcecontrol>

<sourcecontrol type="svn">
 <trunkUrl>....</trunkUrl>
 <workingDirectory>...</workingDirectory>
 <executable>...\SVN.exe</executable>
 <username/>..<password/>
</sourcecontrol>

<tasks>
 <!-- To be carried out if either of the two triggers happen -->
</tasks>

b)为每个与各个文件系统/ svn和任务绑定的触发器创建了不同的范围,最终还是未使用的节点检测到错误。

<cb:define first_trigger_and source _and_tasks>
 <triggers>
  <intervalTrigger seconds="300" buildCondition="ForceBuild"/> 
 </triggers>
 <sourcecontrol type="filesystem">
   <repositoryRoot>...</repositoryRoot>
 </sourcecontrol>
 <tasks>
  <!--To be carried out when first trigger happens -->
 </tasks>
</cb:define>

<!-- And then I call the trigger this way -->
<cb:first_trigger_and source _and_tasks>

这些解决方案都不起作用。

1 个答案:

答案 0 :(得分:3)

可以在<triggers>块中指定多个触发器,但这不是CruiseControl.Net在处理您的配置时抱怨的原因。

在我看来,您需要单个触发器,但两个单独的源控件条目。 <triggers>条目指定CruiseControl.Net何时应该唤醒并检查项目状态。您无法在<sourcecontrol>块中指定多个<project>元素。要在(远程)svn更改和本地文件系统更改上实际重建项目,您应该使用<sourcecontrol type="multi">标准触发器:

<triggers>
  <intervalTrigger seconds="30" />
</triggers>

<sourcecontrol type="multi">
  <sourceControls>
    <filesystem>
      <repositoryRoot>...</repositoryRoot>
    </filesystem>    
    <svn>
      <trunkUrl>....</trunkUrl>
      <workingDirectory>...</workingDirectory>
      <executable>...\SVN.exe</executable>
      <username/>..<password/>
    </svn>
  </sourceControls>
</sourcecontrol>

<tasks>
 <!-- To be executed if either of the two source control providers report changes -->
</tasks>