2010-08-12 117 views
2

我有CruiseControl.NET配置监视10 + .NET项目。所有这些项目(web应用程序,windows服务,wcf服务等)都使用共享类库项目,所以在ccnet.config中我必须将每个项目的svn路径设置为svn repo的根目录。如果我没有这样做,那么对共享程序集的更改不会触发依赖它的重建项目。CruiseControl.NET问题,当多个项目使用共享项目

问题是,因为我已经将每个项目的svn路径设置为repo的根目录,那意味着任何更改都会触发重建每个项目,这需要很长时间。如何在多个项目中使用共享程序集而不必在每次进行一点更改时重建每个项目都解决此问题?

这里的另一种方式看问题:

CC项目#1 = SVN://回购/ webapps /下WebsiteA(引用的svn://回购/共享/ ClassLibraryA) CC项目#2 = SVN: // repo/WebApps/WebsiteB(引用svn:// repo/Shared/ClassLibraryB)

对于CC Project#1,您不能将svn路径设置为svn:// repo/WebApps/WebSiteA,如同你做了和ClassLibraryA改变,那么它不会触发构建。但是,如果您将路径设置为svn:// repo,那么它将接收对ClassLibraryA的更改,但它也会触发CC项目#2。

任何建议,将不胜感激...

回答

1

您可能需要使用项目触发器开始构建: http://confluence.public.thoughtworks.org/display/CCNET/Project+Trigger

如果您ClassLibraryA对CruiseControl的一个项目(其svnpath是svn:// repo/Shared/ClassLibraryA)那么你的WebsiteA看起来像:

<project name="WebSiteA"> 
    <triggers> 
     <projectTrigger project="ClassLibraryA"> 
      <triggerStatus>Success</triggerStatus> 
      <innerTrigger name="ClassLibraryA" type="intervalTrigger" seconds="60" buildCondition="ForceBuild" /> 
     </projectTrigger> 
     <intervalTrigger seconds="300"/> 
    </triggers> 
    <cb:svn-block svnpath="repo/WebApps/WebsiteA" /> 
    <tasks> 
     <...> 
    </tasks> 
    <publishers> 
     <...> 
    </publishers> 
</project> 
+0

谢谢,这个解决方案肯定会起作用。我对它的唯一问题是你必须为每个共享类库创建一个cc项目,当我个人喜欢每个cc项目是一个像web应用程序,Windows服务,wcf服务等的解决方案。 – Justin 2010-08-17 13:50:05

+0

我认为这是“更清洁”的解决方案。或者,您可以使用过滤的源代码管理块(http://ccnetlive.thoughtworks.com/ccnet/doc/CCNET/Filtered%20Source%20Control%20Block.html),但维护起来更加困难。 – 2010-08-17 14:18:36