Installing CruiseControl.NET on Windows Server 2008
We’ve been running CCNet on a very old workstation, and the build times were starting to get rather long. To fix this, we’ve had a new Windows Server 2008 virtual machine provisioned.
These are roughly the steps I followed to get things up and running:
- Enabled IIS 7, WPAS and SMTP
- Installed .NET 3.5 SP1
- Installed CruiseControl.NET 1.4
- Updated web.config to allow webdashboard to run in integrated mode by adding the following section:
<system.webServer><handlers><add name="*.xml_*" path="*.xml" verb="*" type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.CruiseControl.WebDashboard" preCondition="integratedMode,runtimeVersionv2.0" /><add name="*.aspx_*" path="*.aspx" verb="*" type="ThoughtWorks.CruiseControl.WebDashboard.MVC.ASPNET.HttpHandler,ThoughtWorks.CruiseControl.WebDashboard" preCondition="integratedMode,runtimeVersionv2.0" /></handlers><security><requestFiltering allowDoubleEscaping="true" /></security></system.webServer>
- Installed applications required for building and testing:
- CollabNet SVN 1.5.1
- TortoiseSVN 1.5.1
- FxCop 1.36
- Sandcastle Help File Builder
- Windows SDK for Server 2008 (just dev tools)
- Report Viewer 2008 SP1
- SQL Server Express 2008
- Change CCService to run as Automatic and as specific ‘build’ user.
- Grant ‘Modify’ access to ‘build’ user to ‘C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files’.
One issue I did find right at the end – one of our tests was failing with this unusual error:
System.Windows.Markup.XamlParseException: 'DockPanel' object cannot be added to 'Viewbox'. Exception has been thrown by the target of an invocation. Error at object 'System.Windows.Controls.DockPanel' in markup file 'AbbGrain.Aom.Client;component/shell.xaml'. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x80070018): The program issued a command but the command length is incorrect. (Exception from HRESULT: 0x80070018)
at MS.Internal.HRESULT.Check(Int32 hr)
at System.Windows.Media.MediaSystem.Startup(MediaContext mc)
at System.Windows.Media.MediaContext..ctor(Dispatcher dispatcher)
at System.Windows.Media.MediaContext.From(Dispatcher dispatcher)
at System.Windows.Media.Visual.VerifyAPIReadWrite(DependencyObject value)
at System.Windows.Media.VisualCollection.VerifyAPIReadWrite(Visual other)
at System.Windows.Media.VisualCollection.Add(Visual visual)
at System.Windows.Controls.Viewbox.set_InternalChild(UIElement value)
at System.Windows.Controls.Viewbox.set_Child(UIElement value)
All the more strange, as the test was passing on the old build server and also passed on all our workstations. Turns out it’s a bug in .NET 3.5 SP1.
There’s a comment at the bottom of the bug that changing the service to run in XP SP2 compatibility mode should work around the issue. This didn’t work for me initially, until I realised I needed to click on the ‘Show settings for all users’ and then set compatibility for all users. eg.
Restarting the service then saw the WPF test pass.