Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Jason Lee
In diesem Thema wird beschrieben, wie Sie mit dem IIS-Webbereitstellungstool (Web Deploy) und VSDBCMD "Was wäre wenn" (oder simulierte) Bereitstellungen ausführen. Auf diese Weise können Sie die Auswirkungen Ihrer Bereitstellungslogik auf eine bestimmte Zielumgebung bestimmen, bevor Sie Ihre Anwendung tatsächlich bereitstellen.
Dieses Thema ist Teil einer Reihe von Lernprogrammen basierend auf den Anforderungen an die Unternehmensbereitstellung eines fiktiven Unternehmens namens Fabrikam, Inc. In dieser Lernprogrammreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einer realistischen Komplexitätsstufe darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, einem WCF-Dienst (Windows Communication Foundation) und einem Datenbankprojekt.
Die Bereitstellungsmethode im Mittelpunkt dieser Lernprogramme basiert auf dem geteilten Projektdateiansatz, der unter "Grundlegendes zur Projektdatei" beschrieben wird, in dem der Build- und Bereitstellungsprozess von zwei Projektdateien gesteuert wird– eine mit Buildanweisungen, die für jede Zielumgebung gelten, und eine mit umgebungsspezifischen Build- und Bereitstellungseinstellungen. Zur Build-Zeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Build-Anweisungen zu bilden.
Durchführen einer "What If"-Bereitstellung für Webpakete
Web Deploy enthält Funktionen, mit denen Sie Bereitstellungen im Modus "Was wäre wenn" (oder Testversion) ausführen können. Wenn Sie Artefakte im Modus "Was wäre wenn" bereitstellen, generiert Web Deploy eine Protokolldatei, als ob Sie die Bereitstellung ausgeführt hätten, aber es werden keine Änderungen auf dem Zielserver vorgenommen. Die Überprüfung der Protokolldatei kann Ihnen helfen, zu verstehen, welche Auswirkungen Ihre Bereitstellung auf den Zielserver hat, insbesondere:
- Was wird hinzugefügt.
- Was wird aktualisiert.
- Was wird gelöscht.
Da eine „Was-wäre-wenn“-Bereitstellung tatsächlich keine Änderungen am Zielserver vornimmt, kann sie nicht immer zuverlässig vorhersagen, ob eine Bereitstellung erfolgreich sein wird.
Wie in der Bereitstellung von Webpaketen beschrieben, können Sie Webpakete mithilfe von Web Deploy auf zwei Arten bereitstellen, indem Sie das Befehlszeilenprogramm MSDeploy.exe direkt verwenden oder die vom Buildprozess generierte .deploy.cmd Datei ausführen.
Wenn Sie MSDeploy.exe direkt verwenden, können Sie eine "Was wäre wenn"-Bereitstellung ausführen, indem Sie ihrem Befehl das Flag "–whatif " hinzufügen. Um z. B. auszuwerten, was passiert, wenn Sie das ContactManager.Mvc.zip-Paket in einer Stagingumgebung bereitgestellt haben, sollte der Befehl MSDeploy wie folgt aussehen. Beachten Sie, dass im folgenden Beispiel $CREDENTIAL_PLACEHOLDER$ als Platzhalter für das Kennwortschlüssel-Wert-Paar verwendet wird:
MSDeploy.exe
-whatif
-source:package="[path]\ContactManager.Mvc.zip"
-dest:auto,
computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
username="FABRIKAM\stagingdeployer",
password=$CREDENTIAL_PLACEHOLDER$,
authtype="Basic",
includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
-allowUntrusted
Wenn Sie mit den Ergebnissen Ihrer "Was-wäre-wenn"-Bereitstellung zufrieden sind, können Sie das Flag –whatif entfernen, um eine Live-Bereitstellung auszuführen.
Hinweis
Weitere Informationen zu Befehlszeilenoptionen für MSDeploy.exefinden Sie unter Web Deploy Operation Settings.
Wenn Sie die .deploy.cmd-Datei verwenden, können Sie eine "Was-wäre-wenn"-Bereitstellung ausführen, indem Sie das Flag /t (Testmodus) anstelle des /y-Flags ("Ja" oder Updatemodus) in Ihren Befehl aufnehmen. Um beispielsweise auszuwerten, was passiert, wenn Sie das ContactManager.Mvc.zip-Paket bereitgestellt haben, indem Sie die .deploy.cmd Datei ausführen, sollte Der Befehl folgendermaßen aussehen:
ContactManager.Mvc.deploy.cmd /t /m:TESTWEB1 /a:NTLM
Wenn Sie mit den Ergebnissen Ihrer Bereitstellung im Testmodus zufrieden sind, können Sie das Flag /t durch das Flag /y ersetzen, um eine Livebereitstellung auszuführen.
ContactManager.Mvc.deploy.cmd /y /m:TESTWEB1 /a:NTLM
Hinweis
Weitere Informationen zu Befehlszeilenoptionen für .deploy.cmd Dateien finden Sie unter How to: Install a Deployment Package Using the deploy.cmd File. Wenn Sie die .deploy.cmd-Datei ausführen, ohne Kennzeichnungen anzugeben, zeigt die Eingabeaufforderung eine Liste der verfügbaren Flags an.
Durchführung einer hypothetischen "What If"-Bereitstellung für Datenbanken
In diesem Abschnitt wird davon ausgegangen, dass Sie das Hilfsprogramm VSDBCMD verwenden, um eine inkrementelle, schemabasierte Datenbankbereitstellung durchzuführen. Dieser Ansatz wird in der Bereitstellung von Datenbankprojekten ausführlicher beschrieben. Es wird empfohlen, sich mit diesem Thema vertraut zu machen, bevor Sie die hier beschriebenen Konzepte anwenden.
Wenn Sie VSDBCMD im Bereitstellungsmodus verwenden, können Sie das Flag "/dd " (oder "/DeployToDatabase") verwenden, um zu steuern, ob VSDBCMD die Datenbank tatsächlich bereitstellt oder nur ein Bereitstellungsskript generiert. Wenn Sie eine .dbschema-Datei bereitstellen, ist dies das Verhalten:
- Wenn Sie /dd+ oder /dd angeben, generiert VSDBCMD ein Bereitstellungsskript und stellt die Datenbank bereit.
- Wenn Sie /dd- angeben oder den Switch weglassen, generiert VSDBCMD nur ein Bereitstellungsskript.
Hinweis
Wenn Sie eine .deploymanifest-Datei anstelle einer .dbschema-Datei bereitstellen, ist das Verhalten des /dd Schalters wesentlich komplizierter. Im Wesentlichen ignoriert VSDBCMD den Wert der Option "/dd ", wenn die DEPLOYMANIFEST-Datei ein DeployToDatabase-Element mit dem Wert "True" enthält. Die Bereitstellung von Datenbankprojekten beschreibt dieses Verhalten vollständig.
Um beispielsweise ein Bereitstellungsskript für die ContactManager-Datenbank zu generieren, ohne die Datenbank tatsächlich bereitzustellen, sollte Ihr VSDBCMD-Befehl wie folgt aussehen:
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/dd-
/script:"…\Publish-ContactManager-Db.sql"
VSDBCMD ist ein differenzielles Datenbankbereitstellungstool, und als solches wird das Bereitstellungsskript dynamisch generiert, um alle SQL-Befehle zu enthalten, die zum Aktualisieren der aktuellen Datenbank erforderlich sind, sofern vorhanden, auf das angegebene Schema. Das Überprüfen des Bereitstellungsskripts ist eine nützliche Möglichkeit, um zu bestimmen, welche Auswirkungen Ihre Bereitstellung auf die aktuelle Datenbank und die darin enthaltenen Daten hat. Sie können z. B. Folgendes bestimmen:
- Gibt an, ob vorhandene Tabellen entfernt werden und ob dies zu Datenverlusten führt.
- Ob die Reihenfolge der Vorgänge ein Risiko für Datenverlust birgt, z. B. wenn Sie Tabellen aufteilen oder zusammenführen.
Wenn Sie mit dem Bereitstellungsskript zufrieden sind, können Sie die VSDBCMD mit einem /dd+ -Flag wiederholen, um die Änderungen vorzunehmen. Alternativ können Sie das Bereitstellungsskript bearbeiten, um Ihre Anforderungen zu erfüllen und dann manuell auf dem Datenbankserver auszuführen.
Integrieren von "What If"-Funktionen in benutzerdefinierte Projektdateien
In komplexeren Bereitstellungsszenarien sollten Sie eine benutzerdefinierte Microsoft Build Engine (MSBuild)-Projektdatei verwenden, um die Build- und Bereitstellungslogik zu kapseln, wie in Einführung in die Projektdatei beschrieben. Beispiel: In der Contact Manager-Beispiellösung die Datei Publish.proj :
- Erstellt die Lösung.
- Verwendet Web Deploy zum Packen und Bereitstellen der ContactManager.Mvc-Anwendung.
- Verwendet Web Deploy zum Packen und Bereitstellen der ContactManager.Service-Anwendung.
- Stellt die ContactManager-Datenbank bereit.
Wenn Sie die Bereitstellung mehrerer Webpakete und/oder Datenbanken auf diese Weise in einen einzelstufigen Prozess integrieren, können Sie auch die Möglichkeit haben, die gesamte Bereitstellung in einem "Was wäre-wäre"-Modus auszuführen.
Die Datei Publish.proj veranschaulicht, wie Sie dies tun können. Zuerst müssen Sie eine Eigenschaft erstellen, um den Wert "Was wäre wenn" zu speichern:
<PropertyGroup>
<WhatIf Condition=" '$(WhatIf)'=='' ">false</WhatIf>
</PropertyGroup>
In diesem Fall haben Sie eine Eigenschaft namens WhatIf mit dem Standardwert "false" erstellt. Benutzer können diesen Wert überschreiben, indem Sie die Eigenschaft in einem Befehlszeilenparameter auf "true " festlegen, wie sie in Kürze angezeigt wird.
Die nächste Phase besteht darin, alle Web Deploy- und VSDBCMD-Befehle zu parametrisieren, sodass die Flags den WhatIf-Eigenschaftswert widerspiegeln. Beispielsweise führt das nächste Ziel (aus der Datei Publish.proj und vereinfacht) die .deploy.cmd Datei aus, um ein Webpaket bereitzustellen. Standardmäßig enthält der Befehl einen /Y-Schalter ("Ja", oder Updatemodus). Wenn WhatIf auf true festgelegt ist, wird dies durch einen /T-Schalter (Test- oder "WhatIf"-Modus) ersetzt.
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
<PropertyGroup>
<_WhatIfSwitch>/Y</_WhatIfSwitch>
<_WhatIfSwitch Condition=" '$(WhatIf)'=='true' ">/T</_WhatIfSwitch>
<_Cmd>%(PublishPackages.FullPath) $(_WhatifSwitch)
/M:$(MSDeployComputerName)
/U:$(MSDeployUsername)
/P:$(MSDeployPassword)
/A:$(MSDeployAuth)
%(PublishPackages.AdditionalMSDeployParameters)
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
Ebenso verwendet das nächste Ziel das VSDBCMD-Hilfsprogramm, um eine Datenbank bereitzustellen. Standardmäßig ist kein /dd-Schalter enthalten. Dies bedeutet, dass VSDBCMD ein Bereitstellungsskript generiert, die Datenbank jedoch nicht bereitstellt, d. h. ein Szenario "Was wäre wenn". Wenn die WhatIf-Eigenschaft nicht auf "true" festgelegt ist, wird ein /dd-Switch hinzugefügt, und VSDBCMD stellt die Datenbank bereit.
<Target Name="PublishDbPackages" Outputs="%(DbPublishPackages.Identity)">
<PropertyGroup>
<_DbDeployOrScript></_DbDeployOrScript>
<_DbDeployOrScript Condition=" '$(Whatif)'!='true' ">/dd</_DbDeployOrScript>
<_Cmd>"$(VsdbCmdExe)" /a:Deploy
/cs:"%(DbPublishPackages.DatabaseConnectionString)"
/p:TargetDatabase=%(DbPublishPackages.TargetDatabase)
/manifest:"%(DbPublishPackages.FullPath)"
/script:"$(_CmDbScriptPath)"
$(_DbDeployOrScript)
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
Sie können denselben Ansatz verwenden, um alle relevanten Befehle in Ihrer Projektdatei zu parametrisieren. Wenn Sie eine "Was wäre-wenn"-Bereitstellung ausführen möchten, können Sie einfach einen WhatIf-Eigenschaftswert über die Befehlszeile bereitstellen:
MSBuild.exe Publish.proj /p:WhatIf=true;TargetEnvPropsFile=EnvConfig\Env-Dev.proj
Auf diese Weise können Sie eine "Was-wäre-wenn"-Bereitstellung für alle Ihre Projektkomponenten mit nur einem einzigen Schritt ausführen.
Fazit
In diesem Thema wird beschrieben, wie Sie "Was wäre wenn"-Simulationen von Bereitstellungen mit Web Deploy, VSDBCMD und MSBuild ausführen können. Mit einer "Was-wäre-wenn"-Bereitstellung können Sie die Auswirkungen einer vorgeschlagenen Bereitstellung bewerten, bevor Sie tatsächlich Änderungen an der Zielumgebung vornehmen.
Weiterführende Lektüre
Weitere Informationen zur Befehlszeilensyntax von Web Deploy finden Sie unter Web Deploy Operation Settings. Anleitungen zu Befehlszeilenoptionen bei Verwendung der .deploy.cmd-Datei finden Sie unter How to: Install a Deployment Package Using the deploy.cmd File. Anleitungen zur Befehlszeilensyntax VSDBCMD finden Sie unter Command-Line Referenz für VSDBCMD.EXE (Bereitstellungs- und Schemaimport).