2008-08-25 11 views

Antwort

4

Eine von zwei Möglichkeiten.

  1. Wenn Sie bereits eine MSBuild-Datei oder etwas Ähnliches verwenden, fügen Sie die Aktion zur MSBuild-Datei hinzu.
  2. Anstatt einen Befehl direkt auszuführen, erstellen Sie eine Stapeldatei, die diesen Befehl ausführt, und löscht dann das Verzeichnis, und CCnet ruft stattdessen diese Stapeldatei auf.
0

Meine Vermutung ist, dass Sie das Arbeitsverzeichnis vor löschen möchten CruiseControl.NET erhält den neuesten Code aus der Quellcodeverwaltung. Wenn dies der Fall ist, besteht die einzige Möglichkeit, dies zu erreichen, darin, einen benutzerdefinierten Quellcodeverwaltungsdienst für CruiseControl.NET zu schreiben, der zuerst das Arbeitsverzeichnis löscht und dann den neuesten Code abruft. Sehen Sie sich den Quellcode von CruiseControl.NET an, um Beispiele für das Schreiben eines Quellcodeverwaltungs-Providers zu erhalten.

Wenn Sie das Arbeitsverzeichnis löschen möchten nach die neuesten Code aus der Quellcodeverwaltung abgerufen wird, dann können Sie CruiseControl.NET die Verwendung executable task, indem Sie „cmd/c del Verzeichnisname“.

0

In der ASP.NET Arbeit, für mich, der einfachste Weg ich es (was erlaubt mir entweder MSBUild oder NAnt abhängig von dem Projekt zu treffen) war meine eigene exe rollen, die ein Argument, das ich mit übergeben eine von CC.NET gefeuerte Fledermausdatei. Es ist nicht die sicherste Sache der Welt, aber wenn Sie die totale Kontrolle über Ihre automatisierte Maschine haben; es ist nicht zu schäbig. Schnell und wiederverwendbar.

Tropfen in der EXE-Datei irgendwo, dass die rekursive löschen ist:

static void Main(string[] args)

{ 
     for (int n = 0; n < args.Length; n++) 
     { 
      if (Directory.Exists(args[n].ToString())) 
      { 
       Directory.Delete(args[n].ToString(), true); 
      } 

     } 


} 



Drop it in irgendwo mehr Dateien Argumente, um es passieren können und nur ein benutzerdefinierte .bat-Datei für jedes Projekt schreiben. So sieht meine Aufgabenblock wie folgt aus:

 
<tasks> 
    <msbuild> 
     <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable> 
     <workingDirectory>Z:\WorkingDirectory</workingDirectory> 
     <projectFile>YourSolution.sln</projectFile> 
     <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger> 
    </msbuild> 
    <exec> 
     <executable>Z:\SomePathToBuildScripts\YourCustomBat.bat</executable> 
    </exec> 
</tasks> 



Dann wird der letzte Schritt ist die Einrichtung, dass .bat Datei den Lösch auszuführen/rebuild Funktionen nach dem Gebrauch. Stellen Sie in der Bat-Datei sicher, dass Sie die Verzeichnisse, die Sie gelöscht haben, neu erstellen ("MD"), wenn Sie eine Site zurück auf sie veröffentlichen möchten. Auf unseren Dev-Boxen fand ich das der beste Weg, den geliebten Frankenbuild zu verhindern.

0

Die Art, wie ich das in der Vergangenheit getan habe, ist, keine CC.Net Checkout-Quelle selbst zu haben. Stattdessen gibt es zwei <msbuild> Elemente für das Projekt, das erste ruft ein Build-Ziel auf, das svn-clean.pl ausgeführt wird (das zu EXE kompiliert wird) und aktualisiert dann die Quelle, die svn.exe verwendet.Das zweite Element <msbuild> startet den Haupt-Build-Prozess.

Sie können svn-clean einfach durch einen Löschbefehl ersetzen. Für meine Projekte war das Löschen von Spreu aus einer Kasse immer schneller als das Auschecken einer neuen Arbeitskopie.

Die beiden msbuild-Elemente sind erforderlich, da die Hauptprojekt-Builddatei häufig aktualisiert wird. Dies ist wichtig, da Updates für Ihre Build-Datei (en) nur dann neu geladen werden, wenn Sie einen neuen Msbuild-Prozess starten.

Dieses Setup bricht zusammen, wenn ich (sehr selten) die Abhängigkeiten dieses Erstellungsziels für Bereinigung und Aktualisierung in dem Maße verschiebe oder ändere, in dem der Msbuild-Prozess nach gültigen Anweisungen zum Ausführen der Bereinigung aktualisiert werden muss Ziel. Wenn dies passiert, stoppe ich CC.Net, bevor ich beginne, gehe in den CC.Net-Server und mache ein "svn update" von Hand.

Sidelight: Es könnte gut sein, dass CC.Net inzwischen einen natürlichen Clean-Before-Build-Betrieb hat. Ich bin seitdem zu TeamCity gewechselt, das konfigurierbar ist, um dies bei jedem Build zu tun oder nur wenn der Entwickler entscheidet (zB wenn du weißt, dass du eine Änderung vorgenommen hast, die nicht sauber aktualisiert wurde) Verstand).

Verwandte Themen