2013-01-09 201 views
9

我想使用MSDeploy將MVC項目部署到使用TeamCity的服務器。當我在PowerShell中這樣做我的電腦上,使用以下命令:WebDeploy MSBuild不從TeamCity部署

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

它生成項目並將其部署到服務器(信息在DevServer定義發佈配置文件)完美。輸出結果顯示MSDeployPublish部分,其中我看到Starting Web deployment task from source...等文本,然後用行告訴我哪些文件已更新等。

當我在TeamCity上運行此操作時,使用MSBuild Build步驟,在相同文件,具有相同的參數(來自同一工作目錄),它構建項目但不發佈它。相反,它具有構建過程(CoreCompile,_CopyFilesMarkedCopyLocal,GetCopyToOutputDirectoryItems,CopyFilesToOutputDirectory)的常規輸出,但實際上並不會發佈任何內容。

我需要對TeamCity中的設置進行哪些更改才能讓它以與我的計算機上使用MSBuild相同的方式發佈部署?

(TeamCity的7.1,4.0的MSBuild,WebDeploy 3.0時,Visual Studio 12,IIS 7.有關my previous question

+1

你可以顯示PublishProfile的任何部分嗎?我們已經有了一個很好的WebDeploy配置,但是我們不使用PublishProfile,我想看看我能否讓我適合你。 –

+0

PublishProfile的消毒版本可以在這裏找到:https://gist.github.com/7326d2a7f5523058d662 –

+0

Yaakov,你放棄了使用PublishProfile然後使用額外的參數嗎? –

回答

10

我們盡我們與被配置爲TeamCity的MSBuild的一步WebDeploys如下:

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 

我們使用集成身份驗證;根據需要進行更改以符合您的方案。我認爲,這個價值在於它從頭開始構建所有東西,而不依賴於預先構建的軟件包。從你發佈的要點,我注意到你做了一些數據庫發佈,我們不使用WebDeploy,所以我不能提供任何指導。希望這可以幫助。

+0

沒有數據庫發佈,只需在web.config中使用不同的連接字符串,具體取決於構建配置 –

+0

難題。通過上述方法免費獲得的東西(也可以使用WebDeploy?)是它將執行[Web.config轉換](http://msdn.microsoft.com/zh-cn/library/dd465318。 aspx)給你。 –

9

我使用MSBuild.exe打包到拉鍊,並MSdeploy.exe到在分開的步驟中部署。

要部署在命令行上的package.zip文件:

"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 

該命令也值得在詳細解釋:

-verb:同步:使從所述源到網站同步目的地

-source:包= 「C:\生成\ MyAppName.Debug.zip」:源是一個MSBuild壓縮文件包

-dest:自動,WMSVC = webservername:U請將包文件中的設置部署到服務器。用戶帳戶是具有權限的操作系統級帳戶。指定主機名,但不指定IIS網站名稱(以前在項目屬性中的MSBuild項目文件中指定)。

您可以根據您的配置修改參數。我喜歡這樣,因爲使用單獨的步驟,它更容易調試問題。

使用TeamCity構建步驟和命令行參賽者。

更新: 如果你想如何構建使用的MSBuild ZIP包爲例,嘗試這樣的事情:

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

這應該同你的本地計算機上,以及在CI服務器。

+0

我可以這樣做,但我什至不能在我當前步驟的構建輸出中找到它生成構建包的地方,然後可以部署它(如果我沒有運行相同的命令,指定'VisualStudioVersion = 11.0') –

+0

你可以在服務器上安裝TeamCity的本地命令行上運行嗎?你可能會得到額外的輸出。 –

4

下面是配置設置,終於爲我工作:

/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

我也不得不放棄使用PublishProfile,而是使用上面的其他參數..真的很遺憾。不確定爲什麼我們不能在這種情況下使用PublishProfiles? –

0

我有完全一樣的問題!我已使用了超過了解決方案:MsBuild not finding publish profile

基礎是:

  • 構建服務器上安裝Azure的SDK 1.8
  • 強制/ P:PublishProfileRootFolder值,以確保能的MSBuild的定位發佈配置文件
+0

除了你的修復,我不得不添加一個值爲11.0的system.VisualStudioVersion參數。我們在項目中使用了Visual Studio 2012和2013的混合版本,但在TeamCity中僅使用了11.0。如果我將其設置爲12.0,則發佈配置文件會再次被忽略。 –

0

確保您已爲Visual Studio安裝Microsoft Web Developer Tools功能。這在我的構建代理上是缺失的,但是一旦我添加了它,TeamCity構建工作得很好。