2012-10-05 46 views
4

我試圖讓我的web應用程序在自動構建結束時自動部署,我顯然缺少一些東西。TFS2010構建不部署web應用程序

我的設置是:
VS2012一個Win7的工作站
TFS2010儲存庫在serverA
TFS在IIS7建立代理ServerB上
測試網站服務器C。

我創建了一個使用默認MVC4模板的快速測試項目,並使用MS VS Scrum 1.0模板創建了一個Team Project。

我使用publish web對話框爲web應用程序創建了一個新的發佈配置文件,並且.pubxml文件與項目簽入。該pubxml看起來是這樣的:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>MSDeploy</WebPublishMethod> 
    <SiteUrlToLaunchAfterPublish>TestServer/DeployTest</SiteUrlToLaunchAfterPublish> 
    <MSDeployServiceURL>http://TestServer</MSDeployServiceURL> 
    <DeployIisAppPath>webapp-dev/DeployTest</DeployIisAppPath> 
    <RemoteSitePhysicalPath /> 
    <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer> 
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod> 
    <UserName>mydomain\myuser</UserName> 
    <_SavePWD>True</_SavePWD> 
    <PublishDatabaseSettings> 
     <Objects xmlns="" /> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 
</Project> 

*一些名字已更改爲保護無辜者:)

使用此配置文件,我可以成功發佈從Visual Studio中的機應用到測試Web服務器,而不任何問題。繼Scott Hanselman's blog post我順利通過命令行發表了我的工作站上:

的MSBuild DeployTest.csproj/P:DeployOnBuild = TRUE/P:PublishProfile =測試/ P:AllowUntrustedCertificate = TRUE/P:密碼= notTheRealPassword

然後我在Team Explorer中創建了一個可以使用我的構建服務器編譯然後運行單元測試的構建。都好。項目構建,單元測試通過。

我然後加入的參數的命令行到MS建立的參數在構建定義的高級部分:

/P:DeployOnBuild =真/ P:PublishProfile =測試/ P:AllowUntrustedCertificate = true/p:Password = notTheRealPassword

構建運行,單元測試通過,沒有任何內容發佈到Web服務器。 :(

有人能指教我什麼,我錯過了什麼?沒有我讀過似乎表明我已經錯過了一步,但還有看似珍貴的小文件,以解釋如何做到這一點。

+0

唯一的區別,我相信,與這兩個部署場景是部署的鼻祖。我會檢查你的權限。 –

+0

構建服務在我已添加到Web服務器上的管理員組的域帳戶下運行。這是我在命令行測試和VS發佈中成功使用的相同帳戶。 – Nick

回答

1

這聽起來像TFS可能不支持發佈配置。

您可能需要拔出從配置文件的所有參數,手動指定它們。

這裏有一個類似的問題。

Team Build: Publish locally using MSDeploy

+3

任何人都可以確認/否認這一點? TFS2010是否支持PublishProfile參數? – Nick

0

我知道這是一個老問題,但今天我遇到了同樣的問題,我想我知道你觀察到的行爲的原因。讓我總結一下問題:

  1. 您已創建Web部署發佈配置文件。
  2. 從MSBuild命令的命令提示符使用配置文件時,該站點已成功發佈。
  3. 但是,當您從構建定義中使用此配置文件時(通過在構建定義的高級部分中指定MS構建參數),網站不會發布。

我認爲這背後的原因是因爲你的工作站上有VS 2012,它支持使用配置文件功能進行發佈。因此,當您在工作站上通過命令提示符運行MS版本時,該站點將發佈。但是對於發佈配置文件的支持在TFS 2010上不可用,因此使用構建服務器該網站未發佈。

我面臨着同樣的問題,今天我也跟隨來解決問題:

  1. 在TFS機,在命令提示符下,我跑了MS建立與發佈配置命令。該命令成功運行,但沒有任何內容在網站上發佈(複製)。這證明TFS 2010服務器不支持公共配置文件。
  2. 我將VS 2010部署在TFS機器上。我爲Visual Studio 2010安裝了Web部署3.5和Windows Azure SDK。這是爲VS 2010上的發佈配置文件提供支持的方式。
  3. 然後,我使用已發佈的配置文件從命令提示符運行MS Build命令,併成功發佈了該網站。
  4. 然後最終用MS Build參數執行構建定義,併成功發佈了網站。

我知道在TFS機器上安裝Visual Studio不是一個理想的解決方案,但至少它解決了我的問題。 我也不確定爲什麼安裝VS 2010與發佈配置文件支持解決了這個問題。但似乎在安裝之後,一些缺失的組件/ dll被部署在解決了問題的TFS機器上。 希望這可以解決您的部署問題。

[更新]:可能是上述行爲的另一個原因。檢查構建活動的日誌消息。如果您發現與此類似的警告: C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(484,9):警告:未爲項目ProjectName.csproj設置OutputPath屬性。請檢查以確保您已爲該項目指定了Configuration和Platform的有效組合。配置='發佈'平臺='任何CPU'

然後它可能與構建配置有關。如果您使用「任何CPU」作爲構建配置,則將其更改爲「AnyCPU」(刪除空間)。請參考以下鏈接的詳細解釋:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/0bb277ec-a08c-4795-88f0-3207654e2560/the-outputpath-property-is-not-set-for-project-xxxxxbtproj-please-check-to-make-sure-that-you?forum=tfsbuild

Amey

+0

只要我刪除我的任何CPU中的空間,它會在構建中得到80個錯誤... – ganders