Distribuzione di una compilazione specifica

di Jason Lee

Questo argomento descrive come distribuire pacchetti Web e script di database da una compilazione precedente specifica a una nuova destinazione, ad esempio un ambiente di gestione temporanea o di produzione.

Questo argomento fa parte di una serie di esercitazioni basate sui requisiti di distribuzione aziendali di una società fittizia denominata Fabrikam, Inc. Questa serie di esercitazioni usa una soluzione di esempio, la soluzione Contact Manager, per rappresentare un'applicazione Web con un livello realistico di complessità, tra cui un'applicazione MVC 3 ASP.NET, un servizio Windows Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio di suddivisione del file di progetto descritto in Informazioni sul file di progetto, in cui il processo di compilazione e distribuzione è controllato da due file di progetto, uno contenente le istruzioni di compilazione applicabili a ogni ambiente di destinazione e uno contenente le impostazioni di compilazione e distribuzione specifiche dell'ambiente. In fase di compilazione, il file di progetto specifico dell'ambiente viene unito al file di progetto agnostico dell'ambiente per formare un set completo di istruzioni di compilazione.

Panoramica delle attività

Fino a questo momento, gli argomenti di questo set di esercitazioni sono incentrati su come compilare, creare pacchetti e distribuire applicazioni Web e database come parte di un processo singolo o automatizzato. Tuttavia, in alcuni scenari comuni, si desidera selezionare le risorse distribuite da un elenco di compilazioni in una cartella a discesa. In altre parole, la build più recente potrebbe non essere la compilazione che si vuole distribuire.

Si consideri lo scenario di integrazione continua (CI) descritto nell'argomento precedente, Creazione di una definizione di compilazione che supporta la distribuzione. È stata creata una definizione di compilazione in Team Foundation Server (TFS) 2010. Ogni volta che uno sviluppatore controlla il codice in TFS, Team Build creerà il codice, creerà pacchetti Web e script di database nell'ambito del processo di compilazione, eseguirà unit test ed eseguirà le risorse in un ambiente di test. A seconda dei criteri di conservazione configurati quando è stata creata la definizione di compilazione, TFS manterrà un determinato numero di build precedenti.

A seconda dei criteri di conservazione configurati quando è stata creata la definizione di compilazione, T F S manterrà un determinato numero di build precedenti.=======

Si supponga ora di aver eseguito test di verifica e convalida in una di queste build nell'ambiente di test e si è pronti per distribuire l'applicazione in un ambiente di staging. Nel frattempo, gli sviluppatori potrebbero aver controllato il nuovo codice. Non si vuole ricompilare la soluzione e distribuire nell'ambiente di gestione temporanea e non si vuole distribuire la build più recente nell'ambiente di gestione temporanea. Si vuole invece distribuire la compilazione specifica verificata e convalidata nei server di test.

A questo scopo, è necessario indicare all'Microsoft Build Engine (MSBuild) dove trovare i pacchetti Web e gli script di database generati da una compilazione specifica.

Override della proprietà OutputRoot

Nella soluzione di esempio il file Publish.proj dichiara una proprietà denominata OutputRoot. Come suggerisce il nome, questa è la cartella radice che contiene tutto ciò che il processo di compilazione genera. Nel file Publish.proj è possibile notare che la proprietà OutputRoot fa riferimento al percorso radice per tutte le risorse di distribuzione.

Nota

OutputRoot è un nome di proprietà comunemente usato. Anche i file di progetto Visual C# e Visual Basic dichiarano questa proprietà per archiviare il percorso radice per tutti gli output di compilazione.

<PropertyGroup>
  <!--This is where the .deploymanifest file will be written to during a build-->    
  <_DbDeployManifestPath>
    $(OutputRoot)ContactManager.Database.deploymanifest
  </_DbDeployManifestPath>    
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Mvc Web project -->
  <_ContactManagerDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Mvc_Package\
  </_ContactManagerDest>
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Service Web project -->
   <_ContactManagerSvcDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Service_Package\
  </_ContactManagerSvcDest>
  
  <!-- ... -->
</PropertyGroup>

Se si vuole che il file di progetto distribuisca pacchetti Web e script di database da un percorso diverso, ad esempio gli output di una compilazione TFS precedente, è sufficiente eseguire l'override della proprietà OutputRoot . È necessario impostare il valore della proprietà sulla cartella di compilazione pertinente nel server Team Build. Se si esegue MSBuild dalla riga di comando, è possibile specificare un valore per OutputRoot come argomento della riga di comando:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\

In pratica, tuttavia, si vuole ignorare anche la destinazione di compilazione , non è possibile creare la soluzione se non si prevede di usare gli output di compilazione. È possibile eseguire questa operazione specificando le destinazioni da eseguire dalla riga di comando:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
  /target:GatherPackagesForPublishing;PublishDBPackages;PublishWebPackages

Tuttavia, nella maggior parte dei casi, si vuole compilare la logica di distribuzione in una definizione di compilazione TFS. Ciò consente agli utenti con l'autorizzazione Di compilazione coda di attivare la distribuzione da qualsiasi installazione di Visual Studio con una connessione al server TFS.

Creazione di una definizione di compilazione per distribuire build specifiche

La procedura successiva descrive come creare una definizione di compilazione che consente agli utenti di attivare distribuzioni in un ambiente di staging con un singolo comando.

In questo caso, non si vuole che la definizione di compilazione venga effettivamente compilata, ma si vuole solo eseguire la logica di distribuzione nel file di progetto personalizzato. Il file Publish.proj include la logica condizionale che ignora la destinazione di compilazione se il file è in esecuzione in Team Build. Questa operazione viene eseguita valutando la proprietà BuildingInTeamBuild predefinita, impostata automaticamente su true se si esegue il file di progetto in Team Build. Di conseguenza, è possibile ignorare il processo di compilazione ed eseguire semplicemente il file di progetto per distribuire una compilazione esistente.

Per creare una definizione di compilazione per attivare manualmente la distribuzione

  1. In Visual Studio 2010, nella finestra Team Explorer espandere il nodo del progetto team, fare clic con il pulsante destro del mouse su Build e quindi scegliere Nuova definizione di compilazione.

    In Visual Studio 2010, nella finestra Team Explorer espandere il nodo del progetto team, fare clic con il pulsante destro del mouse su Build e quindi scegliere Nuova definizione di compilazione

  2. Nella scheda Generale assegnare alla definizione di compilazione un nome (ad esempio DeployToStaging) e una descrizione facoltativa.

  3. Nella scheda Trigger selezionare Manuale: i controlli non attivano una nuova compilazione.

  4. Nella scheda Build Defaults (Build Defaults ) nella casella Copia output della compilazione nella casella di selezione seguente digitare il percorso Universal Naming Convention (UNC) della cartella di rilascio, ad esempio \TFSBUILD\Drop.

    Nella scheda Build Defaults (Compila impostazioni predefinite) nella casella Copia output compilazione nella casella di selezione seguente digitare il percorso Universal Naming Convention (U N C) della cartella di rilascio, ad esempio \TFSBUILD\Drop.

  5. Nell'elenco a discesa Processo della scheda Processo di compilazione lasciare selezionata DefaultTemplate.xaml . Si tratta di uno dei modelli di processo di compilazione predefiniti che vengono aggiunti a tutti i nuovi progetti del team.

  6. Nella tabella Parametri del processo di compilazione fare clic nella riga Elementi per compilare e quindi fare clic sul pulsante con i puntini di sospensione .

    Nella tabella Parametri del processo di compilazione fare clic nella riga Elementi per compilare e quindi fare clic sul pulsante con i puntini di sospensione.

  7. Nella finestra di dialogo Elementi da compilare fare clic su Aggiungi.

  8. Nell'elenco a discesa Elementi di tipo selezionare File di progetto MSBuild.

  9. Passare al percorso del file di progetto personalizzato con cui si controlla il processo di distribuzione, selezionare il file e quindi fare clic su OK.

    Passare al percorso del file di progetto personalizzato con cui si controlla il processo di distribuzione, selezionare il file e quindi fare clic su OK.

  10. Nella finestra di dialogo Elementi da compilare fare clic su OK.

  11. Nella tabella Parametri del processo di compilazione espandere la sezione Avanzate .

  12. Nella riga Argomenti MSBuild specificare il percorso del file di progetto specifico dell'ambiente e aggiungere un segnaposto per il percorso della cartella di compilazione:

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
    OutputRoot=PLACEHOLDER
    

    Nella riga Argomenti MSBuild specificare il percorso del file di progetto specifico dell'ambiente e aggiungere un segnaposto per il percorso della cartella di compilazione.

    Nota

    È necessario eseguire l'override del valore OutputRoot ogni volta che si accoda una compilazione. Questa operazione viene illustrata nella procedura successiva.

  13. Fare clic su Save (Salva).

Quando si attiva una compilazione, è necessario aggiornare la proprietà OutputRoot per puntare alla compilazione da distribuire.

Per distribuire una compilazione specifica da una definizione di compilazione

  1. Nella finestra Team Explorer fare clic con il pulsante destro del mouse sulla definizione di compilazione e quindi scegliere Coda nuova compilazione.

    Nella finestra Team Explorer fare clic con il pulsante destro del mouse sulla definizione di compilazione e quindi scegliere Coda nuova compilazione.

  2. Nella finestra di dialogo Compilazione coda espandere la sezione Avanzate nella scheda Parametri.

  3. Nella riga Argomenti MSBuild sostituire il valore della proprietà OutputRoot con il percorso della cartella di compilazione. Ad esempio:

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
       OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
    

    Nella riga Argomenti MSBuild sostituire il valore della proprietà OutputRoot con il percorso della cartella di compilazione.

    Nota

    Assicurarsi di includere una barra finale alla fine del percorso della cartella di compilazione.

  4. Fare clic su Coda.

Quando si accoda la compilazione, il file di progetto distribuisce gli script di database e i pacchetti Web dalla cartella di rilascio della compilazione specificata nella proprietà OutputRoot .

Conclusione

Questo argomento descrive come pubblicare risorse di distribuzione, ad esempio pacchetti Web e script di database, da una compilazione precedente specifica usando il modello di distribuzione di file di progetto diviso. È stato illustrato come eseguire l'override della proprietà OutputRoot e come incorporare la logica di distribuzione in una definizione di compilazione TFS.

Altre informazioni

Per altre informazioni sulla creazione di definizioni di compilazione, vedere Creare una definizione di compilazione di base e definire il processo di compilazione. Per altre indicazioni sulle compilazioni di accodamento, vedere Accodamento di una compilazione.