【问题标题】:TFS2010 Build does not deploy web applicationTFS2010 Build 未部署 Web 应用程序
【发布时间】:2012-10-05 13:55:50
【问题描述】:

我正在尝试让我的 Web 应用程序在自动构建结束时自动部署,但我显然遗漏了一些东西。

我的设置是:
Win7 工作站上的 VS2012
服务器 A 上的 TFS2010 存储库
服务器 B 上的 TFS 构建代理
在服务器 C 上的 IIS7 中测试站点。

我使用默认的 MVC4 模板创建了一个快速测试项目,并使用 MS VS Scrum 1.0 模板创建了一个团队项目来配合它。

我使用发布 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=Test /p:AllowUntrustedCertificate=true /p:Password=notTheRealPassword

然后我在 Team Explorer 中创建了一个构建,它将使用我的构建服务器进行编译,然后运行单元测试。都好。项目构建,单元测试通过。

然后,我将命令行中的参数添加到构建定义高级部分的 MS 构建参数中:

/p:DeployOnBuild=true /p:PublishProfile=Test /p:AllowUntrustedCertificate=true /p:Password=notTheRealPassword

构建运行,单元测试通过,没有任何内容发布到 Web 服务器。 :(

有人可以告诉我我错过了什么吗?我读过的任何内容似乎都表明我错过了一个步骤,但似乎很少有宝贵的文档可以解释这是如何完成的。

【问题讨论】:

  • 我相信,这两个部署方案之间的唯一区别是部署的发起者。我会检查你的权限。
  • 构建服务在我已添加到 Web 服务器上的管理员组的域帐户下运行。这是我在命令行测试和VS发布中成功使用的相同帐户。

标签: msbuild visual-studio-2012


【解决方案1】:

听起来 tfs 可能不支持发布配置文件。

您可能需要从配置文件中提取所有参数并手动指定它们。

这是一个类似的问题。

Team Build: Publish locally using MSDeploy

【讨论】:

  • 任何人都可以确认/否认这一点吗? TFS2010 是否支持 PublishProfile 参数?
【解决方案2】:

我知道这是一个老问题,但今天我遇到了同样的问题,我想我知道你观察到的行为的原因。让我总结一下这个问题:

  1. 您已创建一个 Web 部署发布配置文件。
  2. 当您通过 MSBuild 命令在命令提示符下使用配置文件时,站点已成功发布。
  3. 但是,当您从构建定义中使用此配置文件时(通过在构建定义的高级部分中指定 MS 构建参数),站点不会发布。

我认为这背后的原因是因为您的工作站上有 VS 2012,它支持使用配置文件功能发布。因此,当您在工作站上从命令提示符运行 MS 构建时,该站点就会发布。但是在 TFS 2010 上不支持发布配置文件,因此使用构建服务器不会发布站点。

我今天遇到了同样的问题,我做了以下来解决这个问题:

  1. 在 TFS 机器上,从命令提示符下,我使用发布配置文件运行了 MS Build 命令。该命令成功运行,但站点上没有发布(复制)任何内容。这证明 TFS 2010 服务器不支持公共配置文件。
  2. 我在 TFS 机器上部署了 VS 2010。我为 Visual Studio 2010 安装了 web deploy 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='Release' Platform='Any CPU'

那么它可能与构建配置有关。如果您使用“Any 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

艾米

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2020-02-06
    相关资源
    最近更新 更多