在TFS构建过程中部署数据库和Web项目

时间:2012-04-02 17:15:51

标签: tfs build-process web-deployment mixed database-deployment

我有一个混合解决方案,包含几个Web应用程序和SQL数据库项目。

我还有一个带有MS SQL 2012和IIS 7的远程测试服务器.TFS构建服务器在另一台机器上。所有服务器都在单个域上配置。

我想在构建过程中部署数据库和Web应用程序。

现在,我已使用以下标志在TFS XAML流程文件中设置构建包生成:

/p:DeployOnBuild=True

我还为网络发布设置了其他标志:

/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=True
/p:MsDeployPublishMethod=WMSVC
/p:AllowUntrustedCertificate=True

但我有点困惑我应该使用哪种方法:WMSVC或Remote Agent或其他东西。 这是从TFS构建服务器到IIS 7服务器设置Web部署的最简单方法,并避免用户帐户出现问题(避免设置/ p:UserName = YOURUSERNAME / p:密码= XAML中的YOURPASSWORD或构建定义)?

另一个问题是关于数据库项目。构建过程已生成一些.dacpac文件。从TFS构建过程XAML部署它们的最佳方法是什么?

由于我的解决方案具有混合类型的项目,因此我不确定如何调整构建过程,以便正确检测哪些项目需要数据库部署以及哪些需要Web部署。

我希望MSBuild / MSDeploy足够聪明,只要忽略那些/ p:flags,如果currrent项目不是一个Web应用程序,或者它可能会导致整个构建过程失败?

1 个答案:

答案 0 :(得分:3)

这两个网站:

You are deploying it wrong

Headless msbuild support for ssdt sqlproj projects

帮助我正确设置所有内容。

现在我知道WMSVC是IIS7上远程发布的首选(通过RemoteAgent)方法,但我需要在目标服务器上安装WebDeploy。在localhost InProc工作得很好。

一个主要问题是,在构建所有解决方案之后,我正试图发布Web应用程序,但MSBuild只是说“跳过不可发布的应用程序”。

问题是

Targets="Publish"

在我的MSBuild脚本中。当我把它改成

Targets="Build"

并为我的项目添加属性:

  Configuration=Release;
  SkipInvalidConfigurations=true;
  DeployOnBuild=true;
  CreatePackageOnPublish=true;
  AllowUntrustedCertificate=true;
  DeployTarget=MsDeployPublish;
  MSDeployPublishMethod=InProc;
  MsDeployServiceUrl=localhost;
  DeployIISAppPath=Default Web Site\MyWebApp

它最终开始实际发布到我的localhost上的IIS7。

呃,为什么发布目标不发布,但只有Build target呢?这对我来说是一个谜。特别是因为我为我的sqlproj项目使用Publish目标,并且它们实际上已经发布到SQL服务器上了。