6

Ich bin dabei, eine Anwendung zu erstellen, um die Automatisierung von Anwendungsbereitstellungen zu ermöglichen (https://github.com/twistedtwig/AutomdatedDeployments#readme).Wie kann ich ein Msbuild-Zip-Paket lokal oder remote ohne IIS-Beteiligung implementieren?

Die Idee ist, dass alles in der Quellcodeverwaltung, Anwendungsdateien, Anwendungskonfiguration sowie IIS-Konfiguration ist. Meine Anwendung ermöglicht die automatische Bereitstellung der Lösung (Hinzufügen eines Post-Build-Setp zu der Datei sln/proj) nach einem Build auf dem Dev-Rechner. Es ermöglicht dem CI-Server, sich automatisch auf seinem Computer zu testen, sowie dem CI-Server, der erfolgreiche Builds auf QA-/Test-/Produktionsservern durchführt. Eines der Probleme, die ich mit Msdeploy habe, ist die Anforderung, dass IIS vorher mit der Website/Anwendung eingerichtet werden muss (was meine App versucht zu umgehen).

Bis jetzt kann ich App-Pools, Websites und Anwendungen über Config-Dateien automatisch erstellen, aktualisieren und entfernen. Ich kann Dateien und Ordner gut synchronisieren. Der letzte Schritt bestand darin, den Schalter/target: package in msbuild zu verwenden, um saubere Dateistrukturen für Webbereitstellungen zu erstellen. Zum Beispiel würde ich einen Befehl ausführen wie:

msbuild.exe myMvcSite.csproj /target:clean /target:package /p:Configuration=Release /p:_PackageTempDir=C:\websites\mySite /p:PackageLocation=C:\dropLocation\mySite.zip 

Diese eine schöne Zip-Datei mit dem internen Dateipfad erstellt „C_C \ wbesites \ mySite“ bereit (wie ich es verstehe) bis zur Produktion wird synchronisierten Server.

Mein Problem ist, wie ich diese ZIP-Datei bereitstellen. Ich möchte, dass es von allen IIS-Informationen unabhängig ist, d. H. Ich schiebe die Dateien/Ordner einfach an einen Ort (entweder auf dem lokalen Computer für Entwickler oder auf der Fernbedienung zum Testen usw.). Die Einrichtung von IIS mit App-Pools und Websites usw. würde separat vorgenommen. Einige der Befehle (und deren Ausgabe) Ich habe versucht, sind unten:

"C:\Program Files\IIS\Microsoft Web Deploy v2\msdeploy.exe" -verb:sync -source:package="C:\Temp\deploy\installer\test\testPackage.zip" -dest:auto 
Info: Adding sitemanifest (sitemanifest). 
Error: The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'. 
Error count: 1. 

und

"C:\Program Files\IIS\Microsoft Web Deploy v2\msdeploy.exe" -verb:sync -source:package="C:\website\installer\testPackage.zip" -dest:contentpath=C:\temp\mytest 
Error: Source (sitemanifest) and destination (contentPath) are not compatible for the given operation. 
Error count: 1. 

Der erste Befehl Ich versuche, es zu lassen, um die Dateien mit der Struktur entpacken hat. Es scheint jedoch über App-Pool-Kram verärgert zu sein (was ich nicht gerne berühren möchte).

Die zweite Ich versuche, um die "Auto" Bit zu bekommen, aber das ist auch nicht glücklich.

Ich habe Mühe, viele Informationen über diesen Prozess zu finden.

Die einzige Möglichkeit, wie ich das im Moment erreichen kann, ist, msdeploy nicht dafür zu verwenden, sondern meine eigene Aufgabe zu erstellen, die Dateistruktur zu integrieren und die Datei selbst zu synchronisieren (nicht ideal).

+0

Welche Fehler sind Sie auf dem zweiten Befehl empfangen? –

+0

Fehler: Quelle (sitemanifest) und Ziel (contentPath) sind für die angegebene Operation nicht kompatibel. Fehleranzahl: 1. (der zweite Codeblock in meiner Frage). – Jon

Antwort

1

Ich codierte um dieses Problem, anstatt es zu lösen.

Ich nehme das Zip-Paket:

  1. unzip in einem temporären Speicherort
  2. den endgültigen Weg finden wird es (in der Regel von Archive.xml) gehen
  3. überprüfen, ob ich verschmelzenden bin die Ordner oder eine Neuinstallation durchführen (dh lösche ich zuerst den Zielordner).
  4. Kopieren/Verschieben von Dateien zum Beenden des Standorts (normalerweise mit msdeploy).

Ich öffne die Lösung dieses Problems gelesen: https://github.com/twistedtwig/AutomatedDeployments