我正在设置TeamCity,以便将我们的网站项目应用程序(使用* .wdproj)和Web部署应用程序部署到IIS。
我有一个构建配置,它使用MSBuild.exe和MSDeployPublish来构建然后部署应用程序。
我们现在希望将应用程序部署到多个目标环境,因此需要一种基于目标环境提供不同设置的方法。
我已将一个parameters.xml文件添加到Web部署项目中,并已验证此处设置的参数是否已通过目标IIS服务器并正确应用 - 非常好!
现在我想要做的是为每个环境设置不同的参数。我希望我可以使用类似MSDeploy.exe -setParam参数的东西为每个环境指定不同的值,但是我无法通过命令行将我的参数值输入MSBuild。
我怀疑我可能需要执行以下操作之一:
将MSBuild和MSDeploy拆分为单独的构建步骤。
在管道中的某个位置配置任务,以获取n个版本的parameters.something.xml中的1个并将其移动到parameters.xml中,以便其他管道获取它。
我正在寻找最简单的方法来推进这一点,欢迎任何建议。
供参考,这是我现在正在试验的命令:
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命令行。
答案 0 :(得分:3)
嗯,我认为简短的回答是,使用MSBuild 4.0和VS2010,你不能只是通过调用MSBuild将任意参数传递给MSDeployPublish。
我发现这些帖子很有用:
http://forums.iis.net/t/1167657.aspx/1 - 陈明的评论
http://www.hanselman.com/blog/TinyHappyFeatures3PublishingImprovementsChainedConfigTransformsAndDeployingASPNETAppsFromTheCommandLine.aspx - Richard Szalay在底部的评论
阅读完这些内容并筛选Microsoft.Web.Publishing.targets文件一段时间后试图找到“进入方式”,我终于决定在源代码管理的项目文件夹中有多个Parameters.xml副本,根据他们的环境进行标记,例如:
然后,在打包和部署之前,我只是将其中一个文件复制到Parameters.xml中,然后由管道的其余部分拾取 - 完成!
BTW我有一个临时问题,因为看起来像某种文件访问问题,在一个MSBuild.exe调用中使用parameters.xml副本和后续清理工作,我在这里详细说明了:
MSBuild.exe Copy task not working properly unless a version of the file already appears in target
答案 1 :(得分:1)
要回答您的问题,您的命令行参数化不是MSBuild的问题。相反,您应该使用外部工具。例如,如果从批处理文件运行msbuild命令,则可以将参数传递给批处理文件,并为具有不同参数的每个环境运行它。另一种方法是使用像TeamCity或VSTS这样的构建系统并利用它们的参数化机制。适用于VSTS或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)
此外,我建议您对origianl命令行进行一些清理:
答案 2 :(得分:0)
msbuild.exe {build-script.proj} /property:{someParameter=someValue}
在构建脚本中,您可以使用$(someParameter)作为变量