Die CruiseControl.NET Konfiguration
Im Build Ablauf sind mehrere Komponenten beteiligt. Die CCNet Projekt Konfiguration holt sich die neueste Version aus dem Repository und ruft für den effektiven Build Vorgang das MSBuild Skript, welches die definierten Targets enthält, auf. Dieses wiederum erstellt den Build, publiziert die Test Resultate in CCNet, erstellt EMails, und aktualisiert das Repository mit den veränderten Dateien.Das folgende Diagramm verdeutlicht diesen Ablauf:
In CruiseControl.NET werden alle zu integrierenden Projekte in der Datei server\ccnet.config konfiguriert. Die Darstellung des Build Portals kann über Stylesheets und eine eigene Plugin Konfiguration angepasst werden.
Die Projekt Vorlage beinhaltet alles, um einen neu installierten CruiseControl.NET Server in Betrieb nehmen zu können.
Wenn sie das Build Skript (build.csproj) gemäss ihrer Umgebung angepasst haben (siehe Quickstart), können sie den gesamten Server lediglich durch Aufruf eines Target im Build File konfigurieren.
Achtung
Wenn sie in CruiseControl.NET bereits eigene Projekte definiert haben, oder andere Änderungen im Layout oder den Stylesheets des Dashboards vorgenommen haben, werden diese beim Ausführen des MSBuild Targets ConfigureCCNet überschrieben. Sichern sie ggf. ihre Dateien zuerst.
Administrator Rechte
In den meisten Umgebungen benötigen sie Administrator Rechte, um Dateien in Program Files schreiben zu können.
Konfiguration von CCNet
- Stoppen sie den CruiseControl.NET Service, falls er gerade läuft.
- Erstellen sie auf dem Build Server eine Arbeitskopie ihres Projektes.
- Rufen sie ihr Projekt aus dem Repository ab (Checkout / Get Latest)
- Öffnen sie eine .NET SDK Kommandozeile und wechseln sie ins Verzeichnis des Projekts, welches sie auf dem Build Server abgelegt haben.
Führen sie folgendes Kommando aus:
msbuild /t:ConfigureCCNet
- Bevor die Dateien der CCNet Konfiguration kopiert werden, wird zur Sicherheit noch einmal gefragt, ob der Server gestoppt ist. Bestätigen sie dies mit Enter.
Dieses Target ConfigureCCNet ist wie folgt definiert:
<Target Name="ConfigureCCNet">
<Message Text="Configuring CruiseControl.NET on $(ComputerName) for $(ProjectName)" Importance="high" />
<!-- Pass any value in the silent property to suppress the prompt -->
<Prompt Text="Please confirm the CruiseControl.NET server is not running" Condition="'$(Silent)' == ''" />
<Error Text="The CruiseControl.NET installation path $(CCNetInstallPath) doesn't exist." Condition=" !Exists('$(CCNetInstallPath)') " />
<!-- Create a file list of all CCNet files to copy to the installation -->
<CreateItem Include="$(BuildsFolder)\CruiseControl.NET\**\*.*"
Exclude="$(BuildsFolder)\CruiseControl.NET\**\.svn\**;
$(BuildsFolder)\CruiseControl.NET\**\*.template">
<Output TaskParameter="Include" ItemName="CCNetFiles" />
</CreateItem>
<!-- Copy the CCNet Configuration -->
<Copy SourceFiles="@(CCNetFiles)"
DestinationFiles="@(CCNetFiles->'$(CCNetInstallPath)\%(RecursiveDir)%(FileName)%(Extension)')" />
<!-- Create the tokens for the ccnet.config template -->
<CreateItem Include="ProjectName" AdditionalMetadata="ReplacementValue=$(ProjectName)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="BuildServer" AdditionalMetadata="ReplacementValue=$(ComputerName)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="ProjectDir" AdditionalMetadata="ReplacementValue=$(MSBuildProjectDirectory)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="VssDbDir" AdditionalMetadata="ReplacementValue=$(VssDbDir)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="VssProjectPath" AdditionalMetadata="ReplacementValue=$(VssProjectPath)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="VssUsername" AdditionalMetadata="ReplacementValue=$(VssUsername)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="VssPassword" AdditionalMetadata="ReplacementValue=$(VssPassword)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="MSBuildProjectFile" AdditionalMetadata="ReplacementValue=$(MSBuildProjectFile)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="Configuration" AdditionalMetadata="ReplacementValue=$(Configuration)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<CreateItem Include="Platform" AdditionalMetadata="ReplacementValue=$(Platform)">
<Output TaskParameter="Include" ItemName="CCNetServerTokens" />
</CreateItem>
<!-- Create the ccnet.config file by replacing the tokens in the template file -->
<TemplateFile Template="$(BuildsFolder)\CruiseControl.NET\server\ccnet.config.template"
OutputFilename="$(CCNetInstallPath)\server\ccnet.config"
Tokens="@(CCNetServerTokens)" />
<!-- Create the tokens for the dashboard.config template -->
<CreateItem Include="BuildServer" AdditionalMetadata="ReplacementValue=$(ComputerName)">
<Output TaskParameter="Include" ItemName="CCNetDasboardTokens" />
</CreateItem>
<!-- Create the dashboard.config file by replacing the tokens in the template file -->
<TemplateFile Template="$(BuildsFolder)\CruiseControl.NET\webdashboard\dashboard.config.template"
OutputFilename="$(CCNetInstallPath)\webdashboard\dashboard.config"
Tokens="@(CCNetDasboardTokens)" />
</Target>
Der ContinuousBuild wurde so eingestellt, dass er jede Nacht um 23:30 Uhr durchgeführt wird, der ReleaseBuild muss jeweils manuell über das Portal oder die CCTray Applikation ausgelöst werden. Ändern sie diese Projekt Trigger ihren Bedürfnissen entsprechend.