2010-08-12 10 views
2

J'ai configuré CruiseControl.NET pour surveiller 10 projets .NET. Tous ces projets (applications web, services windows, services wcf, etc ...) utilisent des projets de bibliothèque de classes partagées donc dans ccnet.config j'ai dû définir le chemin svn pour chaque projet à la racine du repo svn. Si je ne l'ai pas fait de cette façon, une modification d'un assembly partagé ne déclencherait pas la reconstruction des projets qui en dépendent. Le problème est que parce que j'ai placé le chemin svn pour chaque projet à la racine du repo, cela signifie que tout changement déclenche une reconstruction de chaque projet, ce qui prend beaucoup de temps. Comment contourner ce problème avec l'utilisation d'assemblages partagés dans plusieurs projets sans que chaque projet ne se reconstruise chaque fois qu'un petit changement est effectué?Problème CruiseControl.NET lorsque plusieurs projets utilisent des projets partagés

Voici une autre façon de voir la question:

CC Projet # 1 = svn: // repo/webapps/WebsiteA (références svn: // repo/Shared/ClassLibraryA) CC Projet # 2 = svn: // repo/WebApps/WebsiteB (références svn: // repo/Shared/ClassLibraryB)

Pour le projet CC n ° 1, vous ne pouvez pas définir le chemin svn: svn: // repo/WebApps/WebSiteA, comme si vous avez fait et ClassLibraryA a changé alors il ne déclencherait pas une construction. Toutefois, si vous définissez le chemin d'accès à svn: // repo, les modifications apportées à ClassLibraryA seront prises en compte, mais cela déclenchera également le projet CC# 2.

Toute suggestion serait grandement appréciée ...

Répondre

1

Vous pouvez utiliser le déclencheur projet pour démarrer une construction: http://confluence.public.thoughtworks.org/display/CCNET/Project+Trigger

Si votre ClassLibraryA a un projet sur CruiseControl (dont svnpath est svn: // repo/Shared/ClassLibraryA) alors votre site WebA ressemblera à:

<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

Merci, cette solution fonctionnerait certainement. Le seul problème que j'ai avec cela est que vous devez créer un projet cc pour chaque bibliothèque de classe partagée, quand personnellement je préfère chaque projet cc pour être une solution pour quelque chose comme une application web, un service windows, un service wcf, etc. – Justin

+0

Je pense que c'est la solution "plus propre". Vous pouvez également utiliser un bloc de contrôle de code filtré (http://ccnetlive.thoughtworks.com/ccnet/doc/CCNET/Filtered%20Source%20Control%20Block.html) mais il est plus difficile à gérer. –