Bereitstellen von Webpaketen

von Jason Lee

In diesem Thema wird beschrieben, wie Sie Webbereitstellungspakete mithilfe des IIS-Webbereitstellungstools (Web Deploy) 2.0 auf einem Remoteserver veröffentlichen können.

Es gibt zwei Standard Möglichkeiten, wie Sie ein Webpaket auf einem Remoteserver bereitstellen können:

  • Sie können das Befehlszeilenprogramm MSDeploy.exe direkt verwenden.
  • Sie können die Datei [Projektname].deploy.cmd ausführen, die vom Buildprozess generiert wird.

Das Endergebnis ist unabhängig davon, welchen Ansatz Sie verwenden, identisch. Im Wesentlichen führt die Datei .deploy.cmd nur MSDeploy.exe mit einigen vordefinierten Werten aus, sodass Sie nicht so viele Informationen bereitstellen müssen, um das Paket bereitzustellen. Dies vereinfacht den Bereitstellungsprozess. Auf der anderen Seite bietet ihnen die direkte Verwendung von MSDeploy.exe viel mehr Flexibilität hinsichtlich der genauen Bereitstellung Ihres Pakets.

Welcher Ansatz Sie verwenden, hängt von einer Vielzahl von Faktoren ab, z. B. davon, wie viel Kontrolle Sie über den Bereitstellungsprozess benötigen und ob Sie den Web Deploy-Remote-Agent-Dienst oder den Web Deploy-Handler als Ziel verwenden. In diesem Thema wird erläutert, wie die einzelnen Ansätze verwendet werden, und es wird ermittelt, wann jeder Ansatz geeignet ist.

Bei den Aufgaben und exemplarischen Vorgehensweisen in diesem Thema wird Folgendes vorausgesetzt:

Das Ausführen der Datei [Projektname].deploy.cmd ist die einfachste Möglichkeit, ein Webpaket bereitzustellen. Insbesondere bietet die Verwendung der Datei .deploy.cmd diese Vorteile gegenüber der direkten Verwendung von MSDeploy.exe:

  • Sie müssen den Speicherort des Webbereitstellungspakets nicht angeben. Die Datei .deploy.cmd weiß bereits, wo es sich befindet.
  • Sie müssen den Speicherort der SetParameters.xml-Datei nicht angeben. Die Datei .deploy.cmd weiß bereits, wo sie sich befindet.
  • Sie müssen keine MSDeploy-Quell- und Zielanbieter angeben. Die Datei .deploy.cmd weiß bereits, welche Werte verwendet werden sollen.
  • Sie müssen keine MSDeploy-Vorgangseinstellungen angeben. Die Datei .deploy.cmd fügt dem Befehl MSDeploy.exe automatisch die häufig erforderlichen Werte hinzu.

Bevor Sie die Datei .deploy.cmd zum Bereitstellen eines Webpakets verwenden, sollten Sie Folgendes sicherstellen:

  • Die Datei .deploy.cmd , der [Projektname]. SetParameters.xml Datei und das Webpaket ([Projektname].zip) sich im selben Ordner befinden.
  • Web Deploy (MSDeploy.exe) wird auf dem Computer installiert, auf dem die Datei .deploy.cmd ausgeführt wird .

Die Datei .deploy.cmd unterstützt verschiedene Befehlszeilenoptionen. Wenn Sie die Datei über eine Eingabeaufforderung ausführen, ist dies die grundlegende Syntax:

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

Sie müssen entweder ein /T-Flag oder ein /Y-Flag angeben, um anzugeben, ob Sie einen Testlauf bzw. eine Livebereitstellung durchführen möchten (verwenden Sie nicht beide Flags im selben Befehl). In dieser Tabelle wird der Zweck der einzelnen Flags erläutert.

Flag Beschreibung
/T Ruft MSDeploy.exe mit dem Flag –whatif auf, das eine Testausführung angibt. Anstatt das Paket bereitzustellen, erstellt es einen Bericht darüber, was passieren würde, wenn Sie das Paket bereitgestellt hätten.
/Y Ruft MSDeploy.exe ohne das Flag –whatif auf. Dadurch wird das Paket auf dem lokalen Computer oder dem angegebenen Zielserver bereitgestellt.
/M Gibt den Namen oder die Dienst-URL des Zielservers an. Weitere Informationen zu den Werten, die Sie hier angeben können, finden Sie im Abschnitt Endpunktüberlegungen in diesem Thema. Wenn Sie das Flag /M weglassen, wird das Paket auf dem lokalen Computer bereitgestellt.
/A Gibt den Authentifizierungstyp an, mit dem MSDeploy.exe die Bereitstellung durchführen soll. Mögliche Werte sind NTLM und Basic. Wenn Sie das Flag /A weglassen, lautet der Authentifizierungstyp standardmäßig NTLM für die Bereitstellung im Web Deploy-Remote-Agent-Dienst und basic für die Bereitstellung im Web Deploy-Handler.
/U Gibt den Benutzernamen an. Dies gilt nur, wenn Sie die Standardauthentifizierung verwenden.
/P Gibt das Kennwort an. Dies gilt nur, wenn Sie die Standardauthentifizierung verwenden.
/L Gibt an, dass das Paket im lokalen IIS Express instance bereitgestellt werden soll.
/G Gibt an, dass das Paket mithilfe der tempAgent-Anbietereinstellung bereitgestellt wird. Wenn Sie das Flag /G weglassen, wird der Wert standardmäßig auf false festgelegt.

Hinweis

Jedes Mal, wenn der Buildprozess ein Webpaket erstellt, wird auch eine Datei mit dem Namen [Projektname].deploy-readme.txt erstellt, in der diese Bereitstellungsoptionen erläutert werden.

Zusätzlich zu diesen Flags können Sie Web Deploy-Vorgangseinstellungen als zusätzliche .deploy.cmd-Parameter angeben. Alle zusätzlichen Einstellungen, die Sie angeben, werden einfach an den zugrunde liegenden MSDeploy.exe-Befehl übergeben. Weitere Informationen zu diesen Einstellungen finden Sie unter Web Deploy-Vorgangseinstellungen.

Angenommen, Sie möchten das ContactManager.Mvc-Webanwendungsprojekt in einer Testumgebung bereitstellen, indem Sie die Datei .deploy.cmd ausführen. Ihre Testumgebung ist für die Verwendung des Web Deploy-Remote-Agent-Diensts konfiguriert, wie unter Konfigurieren eines Webservers für die Web Deploy-Veröffentlichung (Remote-Agent) beschrieben. Um die Webanwendung bereitzustellen, müssen Sie die nächsten Schritte ausführen.

So stellen Sie eine Webanwendung mithilfe der Datei .deploy.cmd bereit

  1. Erstellen und verpacken Sie das Webanwendungsprojekt, wie unter Erstellen und Verpacken von Webanwendungsprojekten beschrieben.

  2. Ändern Sie die ContactManager.Mvc.SetParameters.xml-Datei so, dass sie die richtigen Parameterwerte für Ihre Testumgebung enthält, wie unter Konfigurieren von Parametern für die Webpaketbereitstellung beschrieben.

  3. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zum Speicherort der Datei ContactManager.Mvc.deploy.cmd .

  4. Geben Sie diesen Befehl ein, und drücken Sie dann die EINGABETASTE:

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

In diesem Beispiel:

  • Das Flag /Y gibt an, dass Sie das Paket tatsächlich bereitstellen möchten, anstatt eine Testausführung durchzuführen.
  • Das Flag /M gibt an, dass Sie das Paket auf dem Server mit dem Namen TESTWEB1 bereitstellen möchten. Anhand dieses Werts versucht MSDeploy.exe, das Paket im Web Deploy-Remote-Agent-Dienst unter bereitzustellen. http://TESTWEB1/MSDeployAgentService.
  • Das Flag /A gibt an, dass Sie die NTLM-Authentifizierung verwenden möchten. Daher müssen Sie keinen Benutzernamen und kein Kennwort angeben.

Um zu veranschaulichen, wie die Verwendung der Datei .deploy.cmd den Bereitstellungsprozess vereinfacht, sehen Sie sich den Befehl MSDeploy.exe an, der generiert und ausgeführt wird, wenn Sie ContactManager.Mvc.deploy.cmd mithilfe der oben gezeigten Optionen ausführen.

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

Weitere Informationen zur Verwendung der Datei .deploy.cmd zum Bereitstellen eines Webpakets finden Sie unter Vorgehensweise: Installieren eines Bereitstellungspakets mithilfe der Datei deploy.cmd.

Verwenden von MSDeploy.exe

Obwohl die Verwendung der Datei .deploy.cmd im Allgemeinen den Bereitstellungsprozess vereinfacht, gibt es einige Situationen, in denen es besser ist, MSDeploy.exe direkt zu verwenden. Zum Beispiel:

  • Wenn Sie die Bereitstellung im Web Deploy-Handler als Nicht-Administratorbenutzer durchführen möchten, können Sie die Datei .deploy.cmd nicht verwenden. Dies ist auf einen Fehler in Web Deploy 2.0 zurückzuführen, wie unter Endpunktüberlegungen beschrieben.
  • Wenn Sie manuell zwischen verschiedenen SetParameters.xml Dateien an verschiedenen Speicherorten wechseln möchten, können Sie MSDeploy.exe direkt verwenden.
  • Wenn Sie mehrere MSDeploy.exe Befehlszeilenargumente überschreiben möchten, können Sie MSDeploy.exe direkt verwenden.

Wenn Sie MSDeploy.exe verwenden, müssen Sie drei wichtige Informationen angeben:

  • Ein –source-Parameter , der angibt, wo ihre Daten stammen.
  • Ein -dest-Parameter , der angibt, wohin Ihre Daten gehen.
  • Ein -verb-Parameter , der den vorgang angibt, den Sie ausführen möchten.

MSDeploy.exe basiert auf Web Deploy-Anbietern , um Quell- und Zieldaten zu verarbeiten. Web Deploy umfasst viele Anbieter, die den Bereich der Anwendungen und Datenquellen darstellen, mit denen es arbeiten kann. Es gibt z. B. Anbieter für SQL Server Datenbanken, IIS-Webserver, Zertifikate, GAC-Assemblys (Global Assembly Cache), verschiedene verschiedene Konfigurationsdateien und viele andere Datentypen. Sowohl der Parameter –source als auch der Parameter –dest müssen einen Anbieter im Format –source:[providerName]=[location] angeben. Wenn Sie ein Webpaket auf einer IIS-Website bereitstellen, sollten Sie die folgenden Werte verwenden:

  • Der –source-Anbieter ist immer paketiert. Zum Beispiel:

    -source:package='[path to web package]'
    
  • Der -dest-Anbieter ist immer automatisch. Zum Beispiel:

    -dest:auto='[server name or service URL]'
    
  • Das -Verb wird immer synchronisiert.

    -verb:sync
    

Darüber hinaus müssen Sie verschiedene andere anbieterspezifische Einstellungen und allgemeine Betriebseinstellungen angeben. Angenommen, Sie möchten die ContactManager.Mvc-Webanwendung in einer Stagingumgebung bereitstellen. Die Bereitstellung richtet sich an den Webbereitstellungshandler und muss die Standardauthentifizierung verwenden. Um die Webanwendung bereitzustellen, müssen Sie die nächsten Schritte ausführen.

So stellen Sie eine Webanwendung mit MSDeploy.exebereit

  1. Erstellen und packen Sie das Webanwendungsprojekt, wie unter Erstellen und Verpacken von Webanwendungsprojekten beschrieben.

  2. Ändern Sie die ContactManager.Mvc.SetParameters.xml-Datei so, dass sie die richtigen Parameterwerte für Ihre Stagingumgebung enthält, wie unter Konfigurieren von Parametern für die Webpaketbereitstellung beschrieben.

  3. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zum Speicherort von MSDeploy.exe. Dies befindet sich in der Regel unter %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.

  4. Geben Sie diesen Befehl ein, und drücken Sie dann die EINGABETASTE (ohne Zeilenumbrüche):

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

In diesem Beispiel:

  • Der Parameter –source gibt den Paketanbieter und den Speicherort des Webpakets an.
  • Der -dest-Parameter gibt den Autoanbieter an. Die Einstellung computerName stellt die Dienst-URL des Webbereitstellungshandlers auf dem Zielserver bereit. Die Authentifizierungstypeinstellung gibt an, dass Sie die Standardauthentifizierung verwenden möchten, und daher müssen Sie einen Benutzernamen und ein Kennwort angeben. Schließlich gibt die Einstellung includeAcls="False" an, dass Sie die Zugriffssteuerungslisten (Access Control Lists, ACLs) der Dateien in Ihrer Quellwebanwendung nicht auf den Zielserver kopieren möchten.
  • Das Argument –verb:sync gibt an, dass Sie den Quellinhalt auf dem Zielserver replizieren möchten.
  • Die Argumente –disableLink geben an, dass Sie keine Anwendungspools, virtuelle Verzeichniskonfiguration oder SSL-Zertifikate (Secure Sockets Layer) auf dem Zielserver replizieren möchten. Weitere Informationen finden Sie unter Web Deploy Link Extensions.
  • Der Parameter –setParamFile stellt den Speicherort der SetParameters.xml-Datei bereit.
  • Die Option –allowUntrusted gibt an, dass Web Deploy SSL-Zertifikate akzeptieren sollte, die nicht von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurden. Wenn Sie die Bereitstellung im Webbereitstellungshandler durchführen und zum Sichern der Dienst-URL ein selbstsigniertes Zertifikat verwendet haben, müssen Sie diesen Schalter einschließen.

Automatisieren der Webpaketbereitstellung

In vielen Unternehmensszenarien sollten Sie Ihre Webpakete als Teil einer größeren einstufigen oder automatisierten Bereitstellung bereitstellen. Unabhängig davon, ob Sie Ihre Webpakete bereitstellen möchten, indem Sie die Datei ".deploy.cmd" ausführen oder MSDeploy.exe direkt verwenden, können Sie Ihre Befehle parametrisieren und von einem Ziel aus in einer Microsoft-Build-Engine-Projektdatei (MSBuild) aufrufen.

Sehen Sie sich in der Contact Manager-Beispiellösung das PublishWebPackages-Ziel in der Datei Publish.proj an. Dieses Ziel wird einmal für jede .deploy.cmd-Datei ausgeführt, die durch eine Elementliste mit dem Namen PublishPackages identifiziert wird. Das Ziel verwendet Eigenschaften und Elementmetadaten, um einen vollständigen Satz von Argumentwerten für jede .deploy.cmd-Datei zu erstellen, und verwendet dann die Exec-Aufgabe , um den Befehl auszuführen.

<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:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Hinweis

Eine umfassendere Übersicht über das Projektdateimodell in der Beispiellösung sowie eine Einführung in benutzerdefinierte Projektdateien im Allgemeinen finden Sie unter Grundlegendes zur Projektdatei und Grundlegendes zum Buildprozess.

Endpunktüberlegungen

Unabhängig davon, ob Sie Ihr Webpaket bereitstellen, indem Sie die Datei .deploy.cmd ausführen oder direkt MSDeploy.exe verwenden, müssen Sie einen Computernamen oder einen Dienstendpunkt für Ihre Bereitstellung angeben.

Wenn der Zielwebserver für die Bereitstellung mithilfe des Web Deploy Remote Agent-Diensts konfiguriert ist, geben Sie die Zieldienst-URL als Ziel an.

http://[server name]/MSDeployAgentService

Alternativ können Sie den Servernamen allein als Ziel angeben, und Web Deploy leitet die REMOTE-Agent-Dienst-URL ab.

[server name]

Wenn der Zielwebserver für die Bereitstellung mithilfe des Webbereitstellungshandlers konfiguriert ist, müssen Sie die Endpunktadresse des IIS-Webverwaltungsdiensts (WMSvc) als Ziel angeben. Dies hat standardmäßig folgendes Format:

https://[server name]:8172/MSDeploy.axd

Sie können einen dieser Endpunkte entweder mit der Datei .deploy.cmd oder direkt MSDeploy.exe als Ziel verwenden. Wenn Sie jedoch wie unter Konfigurieren eines Webservers für die Webbereitstellungsveröffentlichung (Web Deploy Handler) beschrieben als Benutzer ohne Administrator im Webbereitstellungshandler bereitstellen möchten, müssen Sie der Endpunktadresse des Diensts eine Abfragezeichenfolge hinzufügen.

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

Dies liegt daran, dass der Nicht-Administratorbenutzer keinen Zugriff auf IIS auf Serverebene hat. er hat nur Zugriff auf eine bestimmte IIS-Website. Zum Zeitpunkt des Schreibens können Sie aufgrund eines Fehlers in der Web Publishing Pipeline (WPP) die Datei ".deploy.cmd " nicht mit einer Endpunktadresse ausführen, die eine Abfragezeichenfolge enthält. In diesem Szenario müssen Sie Ihr Webpaket direkt mit MSDeploy.exe bereitstellen.

Hinweis

Weitere Informationen zum Web Deploy-Remote-Agent-Dienst und zum Webbereitstellungshandler finden Sie unter Auswählen des richtigen Ansatzes für die Webbereitstellung. Eine Anleitung zum Konfigurieren Ihrer umgebungsspezifischen Projektdateien für die Bereitstellung auf diesen Endpunkten finden Sie unter Konfigurieren von Bereitstellungseigenschaften für eine Zielumgebung.

Überlegungen zur Authentifizierung

Unabhängig davon, ob Sie Ihr Webpaket bereitstellen, indem Sie die Datei ".deploy.cmd " ausführen oder direkt MSDeploy.exe verwenden, müssen Sie einen Authentifizierungstyp angeben. Web Deploy akzeptiert zwei mögliche Werte: NTLM oder Basic. Wenn Sie die Standardauthentifizierung angeben, müssen Sie auch einen Benutzernamen und ein Kennwort angeben. Es gibt verschiedene Faktoren, die Sie beachten müssen, wenn Sie einen Authentifizierungstyp auswählen:

  • Wenn Sie die Bereitstellung im Web Deploy Remote Agent-Dienst durchführen, müssen Sie die NTLM-Authentifizierung verwenden. Der Remote-Agent-Dienst akzeptiert keine grundlegenden Anmeldeinformationen für die Authentifizierung.
  • Wenn Sie die Bereitstellung im Webbereitstellungshandler durchführen, können Sie entweder NTLM oder die Standardauthentifizierung verwenden. Die Standardeinstellung ist die Standardauthentifizierung. Obwohl die Standardauthentifizierung von Benutzernamen und Kennwörtern abhängt, die in Nur-Text übertragen werden, sind Ihre Anmeldeinformationen geschützt, da der Webbereitstellungshandler immer SSL-Verschlüsselung verwendet.
  • Wenn Ihr Webpaket eine Datenbank enthält und Webserver und Datenbankserver getrennte Computer sind, können Sie die Datenbank aufgrund der NTLM-Einschränkung "Double-Hop" nicht mithilfe der NTLM-Authentifizierung bereitstellen. Sie müssen entweder SQL Server Anmeldeinformationen in Ihrer Bereitstellungsverbindungszeichenfolge verwenden oder grundlegende Authentifizierungsanmeldeinformationen für Web Deploy angeben. Dieses Problem wird unter Bereitstellen von Mitgliedschaftsdatenbanken in Unternehmensumgebungen ausführlicher beschrieben.

Zusammenfassung

In diesem Thema wurde beschrieben, wie Sie ein Webpaket bereitstellen können, indem Sie die Datei ".deploy.cmd " ausführen oder direkt MSDeploy.exe verwenden. Es wurde erläutert, wann jeder Ansatz geeignet ist, und es wurde beschrieben, wie Sie einen Bereitstellungsbefehl als Teil eines größeren einstufigen oder automatisierten Buildprozesses parametrisieren und ausführen können.

Weitere Informationen

Anleitungen zum Erstellen und Parametrisieren eines Webbereitstellungspakets finden Sie unter Erstellen und Verpacken von Webanwendungsprojekten und Konfigurieren von Parametern für die Webpaketbereitstellung. Anleitungen zum Erstellen und Bereitstellen von Webpaketen aus einer Team Foundation Server-instance finden Sie unter Konfigurieren von Team Foundation Server für die automatisierte Webbereitstellung. Informationen zum Anpassen und Problembehandlung beim Bereitstellungsprozess finden Sie unter Ausschließen von Dateien und Ordnern aus der Bereitstellung.