如何通过命令行将MSDeploy样式参数传递给MSBuild?
我正在设置TeamCity以将我们的网站项目应用程序(使用*.wdproj)和Web部署应用程序部署到IIS 我有一个生成配置,它使用MSBuild.exe和MSDeployPublish来生成并部署应用程序 我们现在希望将应用程序部署到多个目标环境,因此需要一种基于目标环境提供不同设置的方法 我已将parameters.xml文件添加到Web部署项目中,并已验证此处设置的参数是否一直通过目标IIS服务器并正确应用-太棒了 现在我要做的是,每个环境有不同的参数设置。我希望可以使用类似MSDeploy.exe-setParam的参数为每个环境指定不同的值,但是我找不到通过命令行将参数值输入MSBuild的方法如何通过命令行将MSDeploy样式参数传递给MSBuild?,msbuild,teamcity,msdeploy,webdeploy,Msbuild,Teamcity,Msdeploy,Webdeploy,我正在设置TeamCity以将我们的网站项目应用程序(使用*.wdproj)和Web部署应用程序部署到IIS 我有一个生成配置,它使用MSBuild.exe和MSDeployPublish来生成并部署应用程序 我们现在希望将应用程序部署到多个目标环境,因此需要一种基于目标环境提供不同设置的方法 我已将parameters.xml文件添加到Web部署项目中,并已验证此处设置的参数是否一直通过目标IIS服务器并正确应用-太棒了 现在我要做的是,每个环境有不同的参数设置。我希望可以使用类似MSDepl
msbuild.exe {build-script.proj} /property:{someParameter=someValue}
我怀疑我可能需要执行以下操作之一:
msbuild /target:MSDeployPublish MySite_deploy.wdproj /P:Configuration=Debug
/P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=www.myserver.com:8172/MsDeploy.axd
/P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True /P:UserName=MyUser /p:Password=MyPassword
/P:DeployIisAppPath=www.myserver.com/MySite
/P:ServerURL=http://www.tryingtoforcethis.com
它工作得很好,除了ServerURL的值(我在parameters.xml中定义了一个参数)没有进入目标站点之外。但是,我在parameters.xml中指定的默认值是。因此,我知道这些参数正在工作,但我不知道如何将它们添加到msbuild命令行
msbuild.exe {build-script.proj} /property:{someParameter=someValue}
在构建脚本中,您可以使用$(someParameter)作为变量好吧,我认为简单的答案是,对于MSBuild 4.0和VS2010,您不能从对MSBuild的调用中将任意参数传递到MSDeployPublish 我发现这些帖子很有帮助: -陈明的评论 -底部Richard Szalay的评论 在阅读了这些内容,并在Microsoft.Web.Publishing.targets文件中筛选了一段时间,试图找到一条“进入”的途径之后,我最终决定在源代码管理中的项目文件夹中保留Parameters.xml的多个副本,并根据它们的环境进行标记,例如:
- Parameters.Test.xml
- Parameters.Staging.xml
- Parameters.Live.xml
为了回答您的问题,命令行的参数化与MSBuild无关。相反,您应该使用外部工具。例如,如果从批处理文件运行msbuild命令,则可以将参数传递给批处理文件,并针对具有不同参数的每个环境运行该命令。另一种方法是使用TeamCity或VSTS之类的构建系统,并利用它们的参数化机制。适用于VST或TFS的命令可以如下所示:
msbuild MySite_deploy.wdproj /target:MSDeployPublish /p:Configuration=Debug
/p:DeployOnBuild=True /p:MsDeployServiceUrl=$(IIsHostNameIp)
/p:AllowUntrustedCertificate=True /p:MSDeployPublishMethod=WMSvc
/p:CreatePackageOnPublish=True /p:UserName=$(IIsUserName) /p:Password=$(IIsPassword)
/p:DeployIisAppPath=$(IIsSite)
此外,我建议对您的原始命令行进行一些清理:
我的参数称为ServerURL。如果指定msbuild/property参数,它似乎不会生效,但parameters.xml中的默认值会生效。在我看来,仅仅向MSBUILD.EXE传递一个参数并不能保证MSDEPLOY会使用它。我还认为它需要是someParameter=someValue,即等号而不是冒号。在这种情况下,导入文件后,需要覆盖该值$(ServerURLFromCommandLine)Parameters.xml似乎专门用于MSDeployPublish目标,它不包含元素等。我认为它不是由MSBuild处理的。请查看此解决方案()感谢您的建议Syam-我以前没有看到过该示例,有时间我会查看它。现在我接受我得到的答案,因为这是我陷入困境时最接近的答案。谢谢。我刚才做了类似的事情。我使用了msbuild命令,进行了配置转换,并为每个配置设置了发布设置。但是我仍然需要一些调整,因为我们有8个qa站点,我不需要8个qa配置转换,所以在执行msbuild任务后,我复制了相应的params.xml文件(我为每个qa站点复制了一个teamcity构建配置),然后复制了msdeploy,您可以在其中添加skip等命令。听起来你现在可以走了,或者还有什么障碍吗?我可以走了!它可能不是最优雅的,但它目前正在发挥作用。呸。我正在关闭项目这一部分的大门。:-)谢谢你的回答。自从我最初的实验以来,我们取得了显著的进步。我们现在在TeamCity中有了不同的构建、打包和部署步骤。部署步骤使用msdeploy.exe和每环境参数XML文件。事实证明,在源代码控制下保存XML中的参数对于跟踪和控制部署时所需的新设置是非常好的。