Meiner Meinung nach ist die Die bessere Lösung ist, ein Build-Skript wie NAnt oder MSBuild zu verwenden. Dann führt Ihr CruiseControl .NET nur einen Teil des Build-Skripts aus. Normalerweise sind Build-Skripte einfacher zu pflegen als eine ccnet.config.
Auch das Debugging ist einfacher, da Sie jeden Teil des Build-Skripts manuell ausführen können.
Beispiel in MsBuild: Sie können zunächst eine Xml-Datei erstellen (nennen wir sie MyTasks.msbuild):
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ProjectA">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello A"/>
</Target>
<Target Name="ProjectB">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello B"/>
</Target>
<Target Name="All">
<CallTarget Targets="ProjectA" />
<CallTarget Targets="ProjectB" />
</Target>
</Project>
Wenn Sie es über die Kommandozeile verwenden möchten, geben Sie einfach "msbuild MyTasks.msbuild" ein. Dann in ccnet.config:
<project name="ProjectA" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>ProjectA</targets>
<description>Building Project A</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>All</targets>
<description>Building Project A and B</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
Der einzige Nachteil ist, dass du den Status in cc nicht kennst, wenn dein Build etwa 20 Minuten dauern würde. Aber das kann behoben werden, da Ihr Projekt name="All" viele msbuild-Aufgaben haben könnte:
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<!-- ... -->
<targets>ProjectA</targets>
</msbuild>
<msbuild>
<!-- ... -->
<targets>ProjectB</targets>
</msbuild>
</tasks>
<!-- ... -->
</project>
Ich hoffe, das hilft...