我有一个包含几个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或远程代理或其他什么。设置从TFS构建服务器到IIS 7服务器的Web部署并避免用户帐户出现问题的最简单方法(以避免设置/p:UserName=YOURUSERNAME/p: 密码=XAML或生成定义中的YOURPASSWORD)?
另一个关注点是数据库项目。生成过程已生成一些.dacpac文件。从TFS构建过程XAML部署它们的最佳方式是什么?
由于我的解决方案具有混合类型的项目,我不确定如何调整我的构建过程,以便它正确地检测哪些项目需要数据库部署,哪些项目需要Web部署。
我希望MSBuild/MSDeploy足够聪明,如果当前项目不是web应用程序,或者它可能会在整个构建过程中产生失败,那么就忽略那些/p:标志?
这两个网站:
你部署错误的
无头msbuild支持ssdt sqlproj项目
帮助我正确设置了所有内容。
现在我知道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 SiteMyWebApp
它最终开始在我的本地主机上发布到IIS7。
嗯,为什么发布目标不发布,而只有构建目标发布?这对我来说是个谜。尤其是因为我在sqlproj项目中使用了Publish目标,而且它们实际上可以发布到SQL服务器上。