2013-01-09 19 views
9

Sto cercando di utilizzare MSDeploy per distribuire un progetto MVC sul server utilizzando TeamCity. Quando faccio questo sul mio computer in PowerShell, utilizzando il seguente comando:WebDeploy con MSBuild non distribuito da TeamCity

msbuild.exe .\mvc.csproj /p:PublishProfile=DevServer /p:VisualStudioVersion=11.0 
/p:DeployOnBuild=True /p:Password=MyPassword /p:AllowUntrustedCertificate=true 

Esso si basa il progetto e dispiega al server (informazioni definito nel devserver pubblicare profilo) perfettamente. L'output mostra una sezione MSDeployPublish alla fine, in cui vedo il testo come Starting Web deployment task from source... e poi con le righe che mi dice quali file vengono aggiornati, ecc

Quando ho eseguito questo su TeamCity, utilizzando un MSBuild costruire passo dopo, sulla stessa file, con gli stessi parametri (dalla stessa directory di lavoro) costruisce il progetto ma non lo pubblica. Invece ha l'output regolare da un processo di compilazione (CoreCompile, _CopyFilesMarkedCopyLocal, GetCopyToOutputDirectoryItems, CopyFilesToOutputDirectory) ma in realtà non esce e pubblica nulla.

Quali modifiche devo apportare alla configurazione in TeamCity per consentirgli di pubblicare l'implementazione nello stesso modo in cui funziona utilizzando MSBuild dal mio computer?

(TeamCity 7.1, MSBuild 4.0, WebDeploy 3.0, Visual Studio 12, IIS 7. In relazione al my previous question)

+1

Puoi mostrare parti del tuo PublishProfile? Abbiamo una buona configurazione di WebDeploy, ma non usiamo un PublishProfile e vorrei vedere se posso fare in modo che il mio si adatti al tuo. –

+0

La versione sterilizzata di PublishProfile è disponibile qui: https://gist.github.com/7326d2a7f5523058d662 –

+0

Yaakov, hai abbandonato con PublishProfile e poi hai usato i parametri aggiuntivi? –

risposta

10

Facciamo i nostri WebDeploys con un passo TeamCity MSBuild configurato come segue:

Build File Path: Server.csproj 

Command Line Parameters: 
/p:Configuration=%configuration% 
/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MsDeployServiceUrl=https://%web.deploy.server%:8172/MsDeploy.axd 
/p:DeployIisAppPath=%web.deploy.site% 
/p:AllowUntrustedCertificate=True 
/p:Username= 
/p:AuthType=NTLM 

Usiamo l'autenticazione integrata; cambiare secondo necessità per adattarsi al tuo schema. Il valore di questo, penso, è che costruisce tutto da zero e non si basa su un pacchetto predefinito.Dall'aspetto che hai postato ho notato che fai qualche pubblicazione su DB, non usiamo WebDeploy per questo, quindi non posso offrire alcuna guida lì. Spero che questo ti aiuti.

+0

Nessuna pubblicazione di db, solo usando diverse stringhe di connessione nel web.config a seconda della configurazione di build –

+0

Gotcha. Qualcosa che ottieni gratis con l'approccio sopra (e forse con qualsiasi uso di WebDeploy?) È che eseguirà [trasformazioni Web.config] (http://msdn.microsoft.com/en-us/library/dd465318. aspx) per te. –

9

Io uso MSBuild.exe di confezionare a zip, e MSdeploy.exe per distribuire in fasi separate.

per distribuire il file package.zip sulla riga di comando:

"C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy.exe" -verb:sync 
    -source:package="C:\Build\MyAppName.Debug.zip" 
    -dest:auto,wmsvc=webservername,username=webdeploy,password=******* 
    -allowUntrusted=true 

Questo comando è anche la pena di spiegare in dettaglio:

-verb: sync: rende il sito web di sincronizzazione dalla sorgente alla la destinazione

-source: package = "C: \ Costruire \ MyAppName.Debug.zip": di origine è un pacchetto di file zip MSBuild

-dest: auto, WMSVC = webservername: u vedere le impostazioni nel file del pacchetto da distribuire al server. L'account utente è un account a livello di sistema operativo con autorizzazione. Il nome host è specificato, ma non il nome del sito Web IIS (che è stato precedentemente specificato nel file di progetto MSBuild nelle proprietà del progetto).

È possibile modificare i parametri in base alla configurazione. Mi piace in questo modo perché con passaggi separati, è più facile eseguire il debug dei problemi.

Utilizzare il passaggio di generazione TeamCity e il conduttore della riga di comando.

Aggiornamento: Se volete un esempio di come costruire il pacchetto ZIP utilizzando MSBuild, provare qualcosa di simile:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" 
MyWebApp/MyWebApp/MyWebApp.csproj 
/T:Package 
/P:Configuration=Debug;PackageLocation="C:\Build\MyWebApp.Debug.zip" 

Questo dovrebbe funzionare lo stesso sul tuo PC locale, nonché sulla Server CI.

+0

Sarei ok con questo, ma non riesco nemmeno a trovare nulla nell'output di build del mio passo corrente su dove sta generando il pacchetto di build che potrebbe essere distribuito (questo compare sul mio computer se eseguo lo stesso comando senza specificando 'VisualStudioVersion = 11.0') –

+0

Sei in grado di eseguire localmente sulla riga di comando sul server con l'installazione di TeamCity? Potresti ottenere un risultato aggiuntivo. –

4

Qui ci sono le impostazioni di configurazione che alla fine ha funzionato per me:

/p:Configuration=CONFIG-NAME 
/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MsDeployServiceUrl=http://SITE-URL/MsDeployAgentService 
/p:username="USERNAME" 
/p:password=PASSWORD 
/p:AllowUntrustedCertificate=True 
/P:CreatePackageOnPublish=True 
/p:DeployIisAppPath=SITE-URL 
/p:MSDeployPublishMethod=RemoteAgent 
/p:IgnoreDeployManagedRuntimeVersion=True 
+0

Ho dovuto anche abbandonare l'uso di PublishProfile e utilizzare invece parametri aggiuntivi come sopra .. peccato davvero. Non sei sicuro del motivo per cui non possiamo usare PublishProfiles in questo scenario? –

0

Ho avuto esattamente lo stesso problema! Ho postato la soluzione che ho usato sopra a: MsBuild not finding publish profile

Nozioni di base sono:

  • Installare l'Azure SDK 1.8 sul server di build
  • vigore le/P: valore PublishProfileRootFolder per garantire MSBuild può individuare il profilo di pubblicazione
+0

Oltre alla correzione, ho dovuto aggiungere un parametro system.VisualStudioVersion con un valore 11.0. Utilizziamo una combinazione di Visual Studio 2012 e 2013 per il progetto, ma solo 11.0 funzionano in TeamCity. Se l'ho impostato su 12.0, il profilo di pubblicazione è stato nuovamente ignorato. –

0

Assicurarsi di disporre della funzionalità Microsoft Web Developer Tools installata per Visual Studio. Questo mancava sul mio agente di build, ma una volta che l'ho aggiunto, il build di TeamCity funzionava bene.

Problemi correlati