Distribuzione di pacchetti Web

di Jason Lee

In questo argomento viene descritto come pubblicare pacchetti di distribuzione Web in un server remoto tramite lo strumento di distribuzione Web Internet Information Services (IIS) (Distribuzione Web) 2.0.

Esistono due modi principali in cui è possibile distribuire un pacchetto Web in un server remoto:

  • È possibile usare direttamente l'utilità della riga di comando MSDeploy.exe.
  • È possibile eseguire il file [nome progetto].deploy.cmd generato dal processo di compilazione.

Il risultato finale è lo stesso indipendentemente dall'approccio usato. Essenzialmente, tutto il file .deploy.cmd consiste nell'eseguire MSDeploy.exe con alcuni valori predeterminati, in modo da non dover fornire tutte le informazioni necessarie per distribuire il pacchetto. Questo semplifica il processo di distribuzione. D'altra parte, l'uso di MSDeploy.exe direttamente offre una maggiore flessibilità rispetto esattamente al modo in cui viene distribuito il pacchetto.

L'approccio usato dipenderà da diversi fattori, tra cui il controllo necessario per il processo di distribuzione e la destinazione del servizio Distribuzione remota Web o del gestore distribuzione Web. Questo argomento illustra come usare ogni approccio e identifica quando ogni approccio è appropriato.

Le attività e le procedure dettagliate in questo argomento presuppongono che:

L'esecuzione del file [nome progetto].deploy.cmd è il modo più semplice per distribuire un pacchetto Web. In particolare, l'uso del file .deploy.cmd offre questi vantaggi rispetto all'uso diretto di MSDeploy.exe:

  • Non è necessario specificare il percorso del pacchetto di distribuzione Web, ovvero il file .deploy.cmd sa già dove si trova.
  • Non è necessario specificare il percorso del file SetParameters.xml , ovvero il file .deploy.cmd sa già dove si trova.
  • Non è necessario specificare i provider MSDeploy di origine e di destinazione, ovvero il file .deploy.cmd conosce già i valori da usare.
  • Non è necessario specificare le impostazioni dell'operazione MSDeploy. Il file di .deploy.cmd aggiunge automaticamente i valori richiesti comunemente al comando MSDeploy.exe.

Prima di usare il file .deploy.cmd per distribuire un pacchetto Web, è necessario assicurarsi che:

  • Il file .deploy.cmd, il [nome del progetto]. SetParameters.xml file e il pacchetto Web ([nome progetto].zip) si trovano nella stessa cartella.
  • Distribuzione Web (MSDeploy.exe) viene installato nel computer che esegue il file .deploy.cmd .

Il file .deploy.cmd supporta varie opzioni della riga di comando. Quando si esegue il file da un prompt dei comandi, si tratta della sintassi di base:

[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]

È necessario specificare un flag /T o un flag /Y per indicare se si vuole eseguire rispettivamente un'esecuzione di prova o una distribuzione in tempo reale (non usare entrambi i flag nello stesso comando). Questa tabella illustra lo scopo di ognuno di questi flag.

Flag Descrizione
/T Chiama MSDeploy.exe con il flag –whatif , che indica un'esecuzione di valutazione. Anziché distribuire il pacchetto, crea un report di ciò che accadrebbe se il pacchetto fosse stato distribuito.
/Y Chiama MSDeploy.exe senza il flag –whatif . In questo modo il pacchetto viene distribuito nel computer locale o nel server di destinazione specificato.
/M Specifica il nome del server di destinazione o l'URL del servizio. Per altre informazioni sui valori che è possibile specificare qui, vedere la sezione Considerazioni sugli endpoint in questo argomento. Se si omette il flag /M , il pacchetto verrà distribuito nel computer locale.
/Un Specifica il tipo di autenticazione da usare MSDeploy.exe per eseguire la distribuzione. I valori possibili sono Bearer, NTLM e Basic. Se si omette il flag /A , per impostazione predefinita il tipo di autenticazione è NTLM per la distribuzione nel servizio Distribuzione remota Web e in Basic per la distribuzione nel gestore distribuzione Web.
/U Specifica il nome dell'utente. Questo vale solo se si usa l'autenticazione di base.
/P Viene specificata la password per . Questo vale solo se si usa l'autenticazione di base.
/L Indica che il pacchetto deve essere distribuito nell'istanza locale di IIS Express.
/G Specifica che il pacchetto viene distribuito usando l'impostazione del provider tempAgent. Se si omette il flag /G , il valore predefinito è false.

Nota

Ogni volta che il processo di compilazione crea un pacchetto Web, crea anche un file denominato [nome progetto].deploy-readme.txt che spiega queste opzioni di distribuzione.

Oltre a questi flag, è possibile specificare le impostazioni dell'operazione Distribuzione Web come parametri aggiuntivi .deploy.cmd . Tutte le impostazioni aggiuntive specificate vengono semplicemente passate al comando MSDeploy.exe sottostante. Per altre informazioni su queste impostazioni, vedere Web Deploy Operation Settings.For more information on these settings, see Web Deploy Operation Settings.

Si supponga di voler distribuire il progetto di applicazione Web ContactManager.Mvc in un ambiente di test eseguendo il file .deploy.cmd . L'ambiente di test è configurato per l'uso del servizio Web Deploy Remote Agent, come descritto in Configurare un server Web per la pubblicazione distribuzione Web (agente remoto). Per distribuire l'applicazione Web, è necessario completare i passaggi successivi.

Per distribuire un'applicazione Web usando il file .deploy.cmd

  1. Compilare e creare un pacchetto del progetto di applicazione Web, come descritto in Compilazione e creazione di pacchetti di progetti di applicazioni Web.

  2. Modificare il file di ContactManager.Mvc.SetParameters.xml in modo che contenga i valori dei parametri corretti per l'ambiente di test, come descritto in Configurazione dei parametri per la distribuzione del pacchetto Web.

  3. Aprire una finestra del prompt dei comandi e passare al percorso del file ContactManager.Mvc.deploy.cmd .

  4. Digitare questo comando e quindi premere INVIO:

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

In questo esempio:

  • Il flag /Y indica che si vuole distribuire effettivamente il pacchetto anziché eseguire una versione di valutazione.
  • Il flag /M indica che si vuole distribuire il pacchetto nel server denominato TESTWEB1. Da questo valore, MSDeploy.exe tenterà di distribuire il pacchetto nel servizio Distribuzione remota web all'indirizzo http://TESTWEB1/MSDeployAgentService.
  • Il flag /A indica che si vuole usare l'autenticazione NTLM. Di conseguenza, non è necessario specificare un nome utente e una password.

Per illustrare come l'uso del file .deploy.cmd semplifica il processo di distribuzione, esaminare il comando MSDeploy.exe che viene generato ed eseguito quando si esegue ContactManager.Mvc.deploy.cmd usando le opzioni illustrate in precedenza.

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"

Per altre informazioni sull'uso del file .deploy.cmd per distribuire un pacchetto Web, vedere Procedura: Installare un pacchetto di distribuzione usando il file deploy.cmd.

Uso di MSDeploy.exe

Anche se l'uso del file .deploy.cmd semplifica in genere il processo di distribuzione, esistono alcune situazioni in cui è preferibile usare direttamente MSDeploy.exe. Ad esempio:

  • Se si vuole eseguire la distribuzione nel gestore distribuzione Web come utente non amministratore, non è possibile usare il file .deploy.cmd . Ciò è dovuto a un bug in Distribuzione Web 2.0, come descritto in Considerazioni sugli endpoint.
  • Se si desidera passare manualmente tra file di SetParameters.xml diversi in posizioni diverse, è consigliabile usare direttamente MSDeploy.exe.
  • Se si desidera eseguire l'override di diversi argomenti della riga di comando MSDeploy.exe, è consigliabile usare direttamente MSDeploy.exe.

Quando si usa MSDeploy.exe, è necessario fornire tre informazioni chiave:

  • Parametro –source che indica da dove provengono i dati.
  • Parametro –dest che indica dove verranno visualizzati i dati.
  • Parametro –verbo che indica l'operazione da eseguire.

MSDeploy.exe si basa sui provider di distribuzione Web per elaborare i dati di origine e di destinazione. Distribuzione Web include molti provider che rappresentano l'intervallo di applicazioni e origini dati con cui può funzionare, ad esempio sono disponibili provider per database DI SQL Server, server Web IIS, certificati, assembly global assembly cache (GAC), vari file di configurazione diversi e molti altri tipi di dati. Sia il parametro –source che il parametro –dest devono specificare un provider, nel formato –source:[providerName]=[location]. Quando si distribuisce un pacchetto Web in un sito Web IIS, è necessario usare questi valori:

  • Il provider –source è sempre un pacchetto. Ad esempio:

    -source:package='[path to web package]'
    
  • Il provider –dest è sempre automatico. Per esempio:

    -dest:auto='[server name or service URL]'
    
  • Il –verbo è sempre sincronizzato.

    -verb:sync
    

Inoltre, è necessario specificare varie altre impostazioni specifiche del provider e impostazioni generali dell'operazione. Si supponga, ad esempio, di voler distribuire l'applicazione Web ContactManager.Mvc in un ambiente di gestione temporanea. La distribuzione avrà come destinazione il gestore distribuzione Web e deve usare l'autenticazione di base. Per distribuire l'applicazione Web, è necessario completare i passaggi successivi.

Per distribuire un'applicazione Web usando MSDeploy.exe usando un token di accesso

MSDeploy V3 supporta l'autenticazione con un token di accesso, noto anche come token di connessione. I token di accesso sono consigliati perché sono i più sicuri.

  1. Compilare e creare un pacchetto del progetto di applicazione Web, come descritto in Compilazione e creazione di pacchetti di progetti di applicazioni Web.

  2. Modificare il file di ContactManager.Mvc.SetParameters.xml in modo che contenga i valori dei parametri corretti per l'ambiente di gestione temporanea, come descritto in Configurazione dei parametri per la distribuzione di pacchetti Web.

  3. Aprire una finestra del prompt dei comandi e passare al percorso di MSDeploy.exe. Si tratta in genere di %PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe.

  4. Se non si ha un token di accesso, crearne uno usando il comando :

    az account get-access-token --query accessToken

  5. Digitare questo comando e quindi premere INVIO (ignorare le interruzioni di riga):

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

In questo esempio:

  • Il parametro –source specifica il provider di pacchetti e indica il percorso del pacchetto Web.
  • Il parametro –dest specifica il provider automatico . L'impostazione computerName fornisce l'URL del servizio del gestore distribuzione Web nel server di destinazione. L'impostazione Bearer authtype indica che si vuole usare un token di accesso per l'autenticazione e, di conseguenza, è necessario specificare il valore del token come password. L'impostazione includeAcls="False" indica che non si desidera copiare gli elenchi di controllo di accesso (ACL) dei file nell'applicazione Web di origine nel server di destinazione.
  • L'argomento –verb:sync indica che si vuole replicare il contenuto di origine nel server di destinazione.
  • Gli argomenti –disableLink indicano che non si vogliono replicare pool di applicazioni, configurazione della directory virtuale o certificati SSL (Secure Sockets Layer) nel server di destinazione. Per altre informazioni, vedere Web Deploy Link Extensions.For more information, see Web Deploy Link Extensions.
  • Il parametro –setParamFile fornisce il percorso del file SetParameters.xml .
  • L'opzione –allowUntrusted indica che Distribuzione Web deve accettare certificati SSL non rilasciati da un'autorità di certificazione attendibile. Se si esegue la distribuzione nel gestore distribuzione Web e si è usato un certificato autofirmato per proteggere l'URL del servizio, è necessario includere questa opzione.

Per distribuire un'applicazione Web usando MSDeploy.exe e l'autenticazione di base

Avviso

L'autenticazione di base non è consigliata se sono disponibili metodi più sicuri (token di connessione).

  1. Compilare e creare un pacchetto del progetto di applicazione Web, come descritto in Compilazione e creazione di pacchetti di progetti di applicazioni Web.

  2. Modificare il file di ContactManager.Mvc.SetParameters.xml in modo che contenga i valori dei parametri corretti per l'ambiente di gestione temporanea, come descritto in Configurazione dei parametri per la distribuzione di pacchetti Web.

  3. Aprire una finestra del prompt dei comandi e passare al percorso di MSDeploy.exe. Si tratta in genere di %PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe.

  4. Digitare questo comando e quindi premere INVIO (ignorare le interruzioni di riga):

    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 questo esempio:

  • Il parametro –source specifica il provider di pacchetti e indica il percorso del pacchetto Web.
  • Il parametro –dest specifica il provider automatico . L'impostazione computerName fornisce l'URL del servizio del gestore distribuzione Web nel server di destinazione. L'impostazione authtype indica che si vuole usare l'autenticazione di base e, di conseguenza, è necessario specificare un nome utente e una password. Infine, l'impostazione includeAcls="False" indica che non si desidera copiare gli elenchi di controllo di accesso (ACL) dei file nell'applicazione Web di origine nel server di destinazione.
  • L'argomento –verb:sync indica che si vuole replicare il contenuto di origine nel server di destinazione.
  • Gli argomenti –disableLink indicano che non si vogliono replicare pool di applicazioni, configurazione della directory virtuale o certificati SSL (Secure Sockets Layer) nel server di destinazione. Per altre informazioni, vedere Web Deploy Link Extensions.For more information, see Web Deploy Link Extensions.
  • Il parametro –setParamFile fornisce il percorso del file SetParameters.xml .
  • L'opzione –allowUntrusted indica che Distribuzione Web deve accettare certificati SSL non rilasciati da un'autorità di certificazione attendibile. Se si esegue la distribuzione nel gestore distribuzione Web e si è usato un certificato autofirmato per proteggere l'URL del servizio, è necessario includere questa opzione.

Automazione della distribuzione di pacchetti Web

In molti scenari aziendali, è consigliabile distribuire i pacchetti Web come parte di una distribuzione più grande in un singolo passaggio o in una distribuzione automatizzata più ampia. Indipendentemente dal fatto che si scelga di distribuire i pacchetti Web eseguendo il file .deploy.cmd o usando direttamente MSDeploy.exe, è possibile parametrizzare i comandi e chiamarli da una destinazione in un file di progetto di Microsoft Build Engine (MSBuild).

Nella soluzione di esempio Contact Manager esaminare la destinazione PublishWebPackages nel file Publish.proj . Questa destinazione viene eseguita una volta per ogni .deploy.cmd file identificato da un elenco di elementi denominato PublishPackages. La destinazione usa le proprietà e i metadati degli elementi per creare un set completo di valori di argomento per ogni .deploy.cmd file e quindi usa l'attività Exec per eseguire il comando.

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

Nota

Per una panoramica più ampia del modello di file di progetto nella soluzione di esempio e un'introduzione ai file di progetto personalizzati in generale, vedere Informazioni sul file di progetto e Informazioni sul processo di compilazione.

Considerazioni sugli endpoint

Indipendentemente dal fatto che si distribuisca il pacchetto Web eseguendo il file .deploy.cmd o usando direttamente MSDeploy.exe, è necessario specificare un nome computer o un endpoint di servizio per la distribuzione.

Se il server Web di destinazione è configurato per la distribuzione tramite il servizio Web Deploy Remote Agent, specificare l'URL del servizio di destinazione come destinazione.

http://[server name]/MSDeployAgentService

In alternativa, è possibile specificare il nome del server solo come destinazione e Distribuzione Web dedurrà l'URL del servizio agente remoto.

[server name]

Se il server Web di destinazione è configurato per la distribuzione usando il gestore distribuzione Web, è necessario specificare l'indirizzo endpoint del Servizio Gestione Web IIS(WMSvc) come destinazione. Per impostazione predefinita, il formato è il seguente:

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

È possibile specificare come destinazione uno di questi endpoint usando direttamente il file .deploy.cmd o MSDeploy.exe. Tuttavia, se si vuole eseguire la distribuzione nel gestore distribuzione Web come utente non amministratore, come descritto in Configurare un server Web per la pubblicazione distribuzione Web (gestore distribuzione Web), è necessario aggiungere una stringa di query all'indirizzo dell'endpoint di servizio.

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

Ciò è dovuto al fatto che l'utente non amministratore non ha accesso a livello di server a IIS; ha accesso solo a un sito Web IIS specifico. Al momento della scrittura, a causa di un bug nella pipeline di pubblicazione Web (WPP), non è possibile eseguire il file .deploy.cmd usando un indirizzo endpoint che include una stringa di query. In questo scenario è necessario distribuire il pacchetto Web usando direttamente MSDeploy.exe.

Nota

Per altre informazioni sul servizio Web Deploy Remote Agent e sul gestore distribuzione Web, vedere Scelta dell'approccio corretto alla distribuzione Web. Per indicazioni su come configurare i file di progetto specifici dell'ambiente per la distribuzione in questi endpoint, vedere Configurare le proprietà di distribuzione per un ambiente di destinazione.

Considerazioni sull'autenticazione

Indipendentemente dal fatto che si distribuisca il pacchetto Web eseguendo il file .deploy.cmd o usando direttamente MSDeploy.exe, è necessario specificare un tipo di autenticazione. Distribuzione Web accetta valori possibili: Bearer, NTLM o Basic. Se si specifica Bearer, è necessario specificare il token come password e qualsiasi valore per il nome utente. Se si specifica l'autenticazione di base, è necessario specificare anche un nome utente e una password. Quando si seleziona un tipo di autenticazione, è necessario tenere presente diversi fattori:

  • Se si esegue la distribuzione nel servizio Web Deploy Remote Agent, è necessario usare l'autenticazione NTLM. Il servizio agente remoto non accetta credenziali di autenticazione di base.
  • Se si esegue la distribuzione nel gestore distribuzione Web, è possibile usare un token di accesso (token di connessione), NTLM o l'autenticazione di base. L'impostazione predefinita è l'autenticazione di base. L'autenticazione di base si basa sui nomi utente e sulle password trasmesse in testo normale, le credenziali vengono protette come gestore distribuzione Web usa sempre la crittografia SSL. Il metodo più sicuro consiste nell'usare un token di accesso, che evita l'invio di una password effettiva.
  • Se il pacchetto Web include un database e il server Web e il server di database sono computer separati, non sarà possibile distribuire il database usando l'autenticazione NTLM a causa della limitazione "doppio hop". È necessario usare le credenziali di SQL Server nella distribuzione stringa di connessione o specificare le credenziali di autenticazione di base per la distribuzione Web. Questo problema è descritto in modo più dettagliato in Distribuzione di database di appartenenza in ambienti aziendali.

Conclusione

In questo argomento è stato descritto come distribuire un pacchetto Web eseguendo il file .deploy.cmd o usando direttamente MSDeploy.exe. Spiega quando ogni approccio può essere appropriato e descrive come è possibile parametrizzare ed eseguire un comando di distribuzione come parte di un processo di compilazione singolo o automatizzato più ampio.

Altre informazioni

Per indicazioni su come creare e parametrizzare un pacchetto di distribuzione Web, vedere Compilazione e creazione di pacchetti di progetti di applicazioni Web e Configurazione dei parametri per la distribuzione di pacchetti Web. Per indicazioni su come compilare e distribuire pacchetti Web da un'istanza di Team Foundation Server (TFS), vedere Configuring Team Foundation Server for Automated Web Deployment (Configurazione di Team Foundation Server per la distribuzione Web automatizzata). Per informazioni su come personalizzare e risolvere i problemi del processo di distribuzione, vedere Esclusione di file e cartelle dalla distribuzione.