2 Stimmen

Wie kann ich mehrere Projekte aus einem Projekt in cruisecontrol.net erzwingen?

Ich bin neu bei cruise control.net, bitte helfen Sie mir bei folgendem Szenario

Ich muss die anderen Projekte von einem Projekt aus erzwingen. Ich weiß, dass wir im Publisher-Teil mit dem Force-Build die anderen Projekte erzwingen können. Aber meine Anforderung ist, dass ich mehr als 2 Projekte erzwingen möchte, aber diese Projekte sollten eines nach dem anderen starten, was auch gelöst werden kann, indem die queuePriority für die Projekte gegeben wird. Hier haben wir eine Einschränkung, ich möchte die Builds einzeln erzwingen, auch zu dieser Zeit sollte es nicht für die Warteschlange überprüfen.

Beispiel Wenn ich von BuildAll Projekt erzwinge, sollte es Projekt A, Projekt B (nach Fertigstellung von Projekt A) und Projekt C (nach Fertigstellung von Projekt A und Projekt B) erstellen

Wenn ich Projekt A erzwinge, sollte es beginnen, zur gleichen Zeit, wenn ich Projekt B & Projekt C erzwinge, die auch ohne Überprüfung der Projekt A Fertigstellung bauen sollte.

Vielen Dank im Voraus

1voto

Damien_The_Unbeliever Punkte 227101

In Projekt B könnten Sie ein Dateisystem-Quellkontroll-Element hinzufügen, das auf das Ausgabeverzeichnis von Projekt A verweist und so eingestellt ist, dass es bei Änderungen ausgelöst wird.

Dies hätte den Nebeneffekt, dass es keine Möglichkeit gäbe, das Projekt A ohne es löst Projekt B aus, das ebenfalls gebaut wird.

1voto

Tuomas Hietanen Punkte 4060

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...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X