CruiseControl.net, msbuild, / p: OutputPath und CCNetArtifactDirectory

Translate

Ich versuche gerade, CruiseControl.net einzurichten. Bisher funktioniert es gut, aber ich habe ein Problem mit der MSBuild-Aufgabe.

Laut demDokumentationwird CCNetArtifactDirectory an MSBuild übergeben. Aber wie benutze ich es?

Ich habe es versucht:

<buildArgs>
   /noconsolelogger /p:OutputPath=$(CCNetArtifactDirectory)\test
</buildArgs>

Aber das geht nicht. Tatsächlich wird der Dienst mit diesem Fehler beendet:

ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Verweis auf das unbekannte Symbol CCNetArtifactDirectory

Die Dokumentation ist eher spärlich und Google und bietet hauptsächlich das Ändern der SLN-Projektdatei an. Dies möchte ich vermeiden, um dieses Projekt später manuell erstellen zu können - ich würde es wirklich vorziehen/p:OutputPath.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Das CCNetArtifactDirectory wird standardmäßig an MSBuild übergeben, sodass Sie sich darüber keine Gedanken machen müssen. MSBuild platziert die Build-Ausgabe an dem "bin-Speicherort", der für das von Ihnen angegebene Arbeitsverzeichnis relevant ist.

<executable>c:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
<workingDirectory>C:\data\projects\FooSolution\</workingDirectory>
<projectFile>FooSolution.sln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug </buildArgs>

Im obigen Beispiel wird Ihre Build-Ausgabe in C: \ data \ projects \ FooSolution [Projektname] \ bin \ Debug abgelegt. Wenn Sie an einem anderen Speicherort ausgeben möchten, können Sie sich das Tag in CCNET ansehen.

<publishers>
  <xmllogger />
  <buildpublisher>
    <sourceDir>C:\data\projects\FooSolution\FooProject\bin\Debug</sourceDir>
    <publishDir>C:\published\FooSolution\</publishDir>
    <useLabelSubDirectory>false</useLabelSubDirectory>
  </buildpublisher>
</publishers>

Auf diese Weise können Sie Ihre Ausgabe an einem anderen Ort veröffentlichen.

Quelle
Translate

Sie können die Artefaktverzeichnisvariable im MSBuild-Skript selbst verwenden. Hier ist ein Beispiel dafür, wie ich FxCop gerade von meinem CC.Net MSBuild-Skript aus ausführe (auf dieses Skript verweist CC.Net - es gibt auch ein "Build" -Ziel im Skript, das eine MSBuild-Aufgabe für die SLN enthält mache die eigentliche Zusammenstellung):

<Exec
  Command='FxCopCmd.exe /project:"$(MSBuildProjectDirectory)\FXCopRules.FxCop" /out:"$(CCNetArtifactDirectory)\ProjectName.FxCop.xml"'
  WorkingDirectory="C:\Program Files\Microsoft FxCop 1.35"
  ContinueOnError="true"
  IgnoreExitCode="true"
/>
Quelle
Translate

Parameter wieCCNetArtifactDirectorywerden mithilfe von Umgebungsvariablen an externe Programme übergeben. Sie sind im externen Programm verfügbar, aber nicht im InnerenCCNETAufbau. Dies führt oft zu Verwirrung.

Sie können stattdessen eine Präprozessorkonstante verwenden:

<cb:define project.artifactDirectory="C:\foo">
<project>
  <!-- [...] -->
  <artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
  <!-- [...] -->
  <tasks>
    <!-- [...] -->
    <msbuild>
      <!-- [...] -->
      <buildArgs>/noconsolelogger /p:OutputPath=$(project.artifactDirectory)\test</buildArgs>
      <!-- [...] -->
    </msbuild>
    <!-- [...] -->
  </tasks>
  <!-- [...] -->
</project>
Quelle