2013-02-15 8 views
5

Utilizzo TFS 2012 per automatizzare una build di una soluzione che contiene più servizi Windows e due applicazioni Web.Personalizzazione della struttura della cartella di rilascio con TFS Team Build

Ho usato la guida Ho trovato here per personalizzare il modello di processo di costruzione in modo che i servizi di Windows siano inseriti in una struttura di cartelle che mi piace. In particolare:

  1. \ dropserver \ droproot \ MyApp \ BuildNumber \
    • \ Service1
    • \ Service2
    • \ Service3
    • \ Service4

Questa grande opera , ma sfortunatamente non funziona per applicazioni web. Se ho usato la stessa strategia per quelli, ho solo il contenuto di/bin per ogni app web, piuttosto che il contenuto del sito completo.

MSBuild utilizza in genere i target delle applicazioni Web per gestirli, ma per qualche motivo, questo non funziona quando si personalizza la build come ho fatto io. Non riesco più a ottenere la cartella _PublishedWebSites nell'output di build. (Immagino sia perché ho cancellato la proprietà OutDir dell'attività di MSBuild.)

Qualcuno ha fatto qualcosa del genere e l'ha fatto funzionare anche con le applicazioni web?

+2

Potete aprire i vostri progetti di siti web nel blocco note e verificare che avvenga in là: True

risposta

1

Con un po 'di personalizzazione, questa soluzione ha finito per lavorare per me:

http://www.edsquared.com/2011/01/31/Customizable+Output+Directories+For+TFS+2010+Build.aspx

In sostanza, ha fatto quello che puntano raccomandato, ma anche sfruttato una configurazione nuova soluzione (che ho chiamato TeamBuild) piuttosto che definizioni di proprietà condizionali.

Credo che la chiave per far funzionare tutto questo sia stato il passaggio di OutputDirectory come argomento TeamBuildOutDir a MSBuild. L'incorporamento di questo riferimento di variabile nella variabile OutDir o OutputPath è stato consentito Team Build per creare il percorso di staging corretto e quindi copiare automaticamente i file da tale posizione nella cartella di rilascio.

Ho intenzione di prendere questo un po 'di più e di eliminare l'intera cosa _PublishedWebSites, ma ciò sarà fatto interamente nel flusso di lavoro di generazione.

EDIT: TFS 2013 supporta in modo nativo con un'opzione di configurazione è sufficiente costruire:

enter image description here

+0

Ho anche usato la soluzione EdSquared con grande effetto. Lo consiglio vivamente. Ci sono alcuni dettagli nei commenti che è importante notare (vale a dire che la proprietà OutDir deve terminare con una barra finale, ecc.). – efisher

1

Penso di poter essere d'aiuto, sembra che negli obiettivi di compilazione la cartella dei siti Web pubblicati non venga creata se OutDir è uguale a OutputPath.

Quindi questo non è perfetto, ma se si aggiunge il seguente nel file csproj nel primo gruppo di proprietà, si otterrà tutto schierato in "\ bin \ deploy \", tra cui la cartella _PublishedWebsites

<DeployOnBuild>True</DeployOnBuild> 
<OutDir>bin\deploy\</OutDir> 
+0

Dare a questo un colpo ora ... perché ho bisogno di specificare questo due volte? – RMD

+0

Ho aggiunto questo al mio file proj, ma non sembra aver fatto alcuna differenza. Quando costruisco la configurazione "TeamBuild" in VS, ottengo l'output binario copiato nella mia struttura di directory di destinazione, ma nessuno del resto dei file web (html, js, css, immagini, ecc.) Viene copiato. – RMD

+0

Scusate, mi sono perso qualcosa più in basso, che non era in realtà l'intenzione di risolverlo. Ho apportato una modifica che ritengo possa aiutare, sebbene non sia perfetta. –

0

Dai un'occhiata anche a questo thread come questo post. Team Build: Publish locally using MSDeploy Poiché sono necessari tutti i file per i progetti Web, è necessario attivare il processo di pubblicazione e, modificando la destinazione di tale processo, è possibile copiare tutti i file dove necessario. Penso che l'opzione (2) dalla sua risposta funzionerà per voi. Spero che questo aiuti.

0

Come posso vedere nel riferimento link, sarà solo compilare e impacchettare i file binari. Non distribuisce il sito Web seguendo i passaggi indicati in questo.

Se si desidera ottenere il .html, .css, .js ecc. Nella cartella _PublishedWebSites, è necessario eseguire una distribuzione Web . È possibile farlo manualmente facendo clic sull'opzione publish dal menu di scelta rapida del progetto VS e selezionando Metodo di pubblicazione come file system .

Tuttavia, poiché è necessario automatizzarlo nella build e rilasciarlo nella cartella di rilascio personalizzata, potrebbe essere necessario modificare lo script MSBuild chiamando l'attività AspNetCompiler. È possibile ottenere maggiori informazioni al riguardo allo MSDN link. Specificando TargetPath mentre si chiama questo obiettivo, è possibile distribuire i file Web nella cartella di rilascio personalizzata appropriata.

Happy Scripting.

Problemi correlati