我有一个ccnet项目,可以监视两个SVN存储库以进行更改。使用多重类型的源控制块可以正常工作。现在项目需要观察两个存储库和一个文件。只有在两个存储库中的一个更改和文件发生更改时,才需要构建它。
我尝试在多源控制块中嵌套多源控制块,如下所示(您可以忽略所有变量):
<sourcecontrol type="multi">
<requireChangesFromAll>True</requireChangesFromAll>
<sourceControls>
<sourcecontrol type="multi">
<requireChangesFromAll>False</requireChangesFromAll>
<sourceControls>
<filtered>
<sourceControlProvider type="svn" autoGetSource="false">
<executable>$(svn-exe)</executable>
<timeout units="minutes">60</timeout>
<trunkUrl>$(svn-srcmwo)</trunkUrl>
<workingDirectory>$(mwo-localfull)</workingDirectory>
</sourceControlProvider>
<inclusionFilters>
<cb:mwo-include-filters/>
</inclusionFilters>
</filtered>
<filtered>
<sourceControlProvider type="svn" autoGetSource="false">
<executable>$(svn-exe)</executable>
<timeout units="minutes">10</timeout>
<trunkUrl>$(svn-orion)</trunkUrl>
<workingDirectory>$(orion-localfull)</workingDirectory>
<webUrlBuilder type="websvn">
<url>$(viewvc-orion){0}$(viewvc-config)</url>
</webUrlBuilder>
</sourceControlProvider>
<inclusionFilters>
<pathFilter>
<pattern>$(svn-orion-trunk)</pattern>
</pathFilter>
</inclusionFilters>
<exclusionFilters>
<pathFilter>
<pattern>$(svn-grsim-makfiles)</pattern>
</pathFilter>
</exclusionFilters>
</filtered>
</sourceControls>
</sourcecontrol>
<sourcecontrol type="filesystem">
<repositoryRoot>e:\build_listen</repositoryRoot>
</sourcecontrol>
</sourceControls>
</sourcecontrol>
但是CCValidator给出了错误:
检测到未使用的节点:&lt; sourcecontrol type =“filesystem”&gt;&lt; repositoryRoot&gt; e:\ build_listen&amp; lt / repositoryRoot&gt;&lt; / sourcecontrol&gt;
有没有人知道如何做到这一点 - 在文件系统和两个存储库上执行AND操作?
答案 0 :(得分:4)
这个嵌套的源代码控件确实非常复杂。首先,您错过了外部多源控件块中的<sourceControls>
标记。其次,CCNET documentation on multi sourcecontrol blocks中有一个重要的注释:
请注意,由于解析配置的方式,如果使用“多”块,则元素中的项不应是元素(如您所料)。相反,元素的名称应与使用元素时在“type”属性中放置的名称相同。
这就是源控件阻止在现有配置中工作的方式:<filtered>
而不是<sourcecontrol type="filtered">
。
所以这应该可以解决你的问题:
<sourcecontrol type="multi">
<requireChangesFromAll>True</requireChangesFromAll>
<sourceControls>
<multi>
<requireChangesFromAll>False</requireChangesFromAll>
<sourceControls>
<filtered>
<sourceControlProvider type="svn" autoGetSource="false">
<executable>$(svn-exe)</executable>
<timeout units="minutes">60</timeout>
<trunkUrl>$(svn-srcmwo)</trunkUrl>
<workingDirectory>$(mwo-localfull)</workingDirectory>
</sourceControlProvider>
<inclusionFilters>
<cb:mwo-include-filters/>
</inclusionFilters>
</filtered>
<filtered>
<sourceControlProvider type="svn" autoGetSource="false">
<executable>$(svn-exe)</executable>
<timeout units="minutes">10</timeout>
<trunkUrl>$(svn-orion)</trunkUrl>
<workingDirectory>$(orion-localfull)</workingDirectory>
<webUrlBuilder type="websvn">
<url>$(viewvc-orion){0}$(viewvc-config)</url>
</webUrlBuilder>
</sourceControlProvider>
<inclusionFilters>
<pathFilter>
<pattern>$(svn-orion-trunk)</pattern>
</pathFilter>
</inclusionFilters>
<exclusionFilters>
<pathFilter>
<pattern>$(svn-grsim-makfiles)</pattern>
</pathFilter>
</exclusionFilters>
</filtered>
</sourceControls>
</multi>
<filesystem>
<repositoryRoot>e:\build_listen</repositoryRoot>
</filesystem>
</sourceControls>
</sourcecontrol>
答案 1 :(得分:1)
我认为你不能有两个sourcecontrol
块
你应该重构你的项目如下:
只有文件系统触发器的一个项目 这将成为下一份工作的触发器
使用您的多源控件触发器链接到上一个项目的另一个项目。
看看CruiseServer Control Task同步两个作业: