Condividi tramite


Distribuzione di pacchetti Web

di Jason Lee

Questo argomento descrive come pubblicare pacchetti di distribuzione Web in un server remoto usando 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. In sostanza, tutto il file deploy.cmd esegue MSDeploy.exe con alcuni valori predeterminati, in modo che non sia necessario fornire quante informazioni per distribuire il pacchetto. Ciò semplifica il processo di distribuzione. D'altra parte, l'uso di MSDeploy.exe offre una maggiore flessibilità rispetto al modo in cui viene distribuito il pacchetto.

L'approccio usato dipenderà da diversi fattori, tra cui il controllo richiesto nel processo di distribuzione e se si punta al servizio Distribuzione remota Web o al 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 sull'uso diretto di MSDeploy.exe:

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

Prima di usare il file con estensione 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 con estensione 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 una versione di valutazione o una distribuzione live rispettivamente (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 si distribuisce il pacchetto.
/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 che MSDeploy.exe deve usare per eseguire la distribuzione. I valori possibili sono NTLM e Basic. Se si omette il flag /A , il tipo di autenticazione predefinito è NTLM per la distribuzione nel servizio Distribuzione remota Web e in Basic per la distribuzione nel gestore distribuzione Web.
/U Specifica il nome utente. Ciò si applica solo se si usa l'autenticazione di base.
/P Modifica la password. Ciò si applica solo se si usa l'autenticazione di base.
/L Indica che il pacchetto deve essere distribuito nell'istanza di IIS Express locale.
/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 delle operazioni di 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 Impostazioni operazione di distribuzione Web.

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

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

  1. Compilare e creare un pacchetto del progetto dell'applicazione Web, come descritto in Creazione e creazione di progetti applicazione Web per la creazione e la creazione di pacchetti.

  2. Modificare il file ContactManager.Mvc.SetParameters.xml in modo da contenere i valori dei parametri corretti per l'ambiente di test, come descritto in Configurazione dei parametri per la distribuzione di pacchetti 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
    

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 con estensione deploy.cmd semplifica il processo di distribuzione, esaminare il comando MSDeploy.exe 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 con estensione deploy.cmd semplifica in genere il processo di distribuzione, esistono alcune situazioni quando è preferibile usare direttamente MSDeploy.exe. Ad esempio:

  • Se si vuole distribuire nel gestore distribuzione Web come utente non amministratore, non è possibile usare il file deploy.cmd . Questo è dovuto a un bug in Distribuzione Web 2.0, come descritto in Considerazioni sugli endpoint.
  • Se si vuole passare manualmente tra file diversiSetParameters.xml 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 di origine 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. La 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 SQL Server, server Web IIS, certificati, assembly globali (GAC), vari file di configurazione diversi e molti altri tipi di dati. Sia il parametro –source che il parametro –dest deve specificare un provider, nel formato –source:[providerName]=[location]. Quando si distribuisce un pacchetto Web in un sito Web IIS, è consigliabile usare questi valori:

  • Il provider di origine è sempre 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 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 staging. La distribuzione ha 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 tramite MSDeploy.exe

  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 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 del pacchetto Web.

  3. Aprire una finestra del prompt dei comandi e passare al percorso di MSDeploy.exe. Si trova in genere in %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\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
    

Esempio:

  • Il parametro –source specifica il provider del pacchetto 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 desidera replicare i pool di applicazioni, la configurazione della directory virtuale o i 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 che non sono stati 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ù ampia o automatizzata. Indipendentemente dal fatto che si scelga di distribuire i pacchetti Web eseguendo il file con estensione deploy.cmd o usando direttamente MSDeploy.exe, è possibile parametrizzare i comandi e chiamarli da una destinazione in un file di progetto 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 file con estensione deploy.cmd 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 file .deploy.cmd 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 con estensione 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 usando il servizio Agente remoto distribuzione Web, specificare l'URL del servizio di destinazione come destinazione.

http://[server name]/MSDeployAgentService

In alternativa, è possibile specificare solo il nome del server 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 con estensione deploy.cmd o MSDeploy.exe. Se tuttavia 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 con estensione 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 relative all'autenticazione

Indipendentemente dal fatto che si distribuisca il pacchetto Web eseguendo il file con estensione deploy.cmd o usando direttamente MSDeploy.exe, è necessario specificare un tipo di autenticazione. Distribuzione Web accetta due valori possibili: NTLM o Basic. 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 le credenziali di autenticazione di base.
  • Se si esegue la distribuzione nel gestore distribuzione Web, è possibile usare NTLM o l'autenticazione di base. L'impostazione predefinita è l'autenticazione di base. Anche se l'autenticazione di base si basa su nomi utente e password trasmessi in testo normale, le credenziali vengono protette come gestore distribuzione Web usa sempre la crittografia SSL.
  • 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 "double hop" NTLM. È necessario usare SQL Server credenziali nella stringa di connessione della distribuzione o fornire le credenziali di autenticazione di base a 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 con estensione deploy.cmd o usando direttamente MSDeploy.exe. È stato spiegato quando ogni approccio potrebbe essere appropriato e ha descritto come è possibile parametrizzare ed eseguire un comando di distribuzione come parte di un processo di compilazione automatizzato o in un unico passaggio 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 creare e distribuire pacchetti Web da un'istanza di Team Foundation Server (TFS), vedere 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.