我有一个ASP .Net MVC应用程序,有4种不同的发布配置文件:dev,test,demo和prod。
使用相同的两个步骤构建这些publising配置文件:NuGet还原,然后是MSBuild。然后,它们被部署到许多不同的服务器上:一些开发服务器(每个团队一个服务器开发人员),一个测试服务器,一个演示服务器和几个生产服务器。
msbuild /p:Configuration="$(Configuration)"
/p:PlatformTarget="any cpu"
/p:DeployOnBuild="True"
/p:DeployTarget="MsDeployPublish"
/p:MSDeployServiceURL="$(MSDeployServiceURL)"
/p:DeployIISAppPath="portal"
/p:CreatePackageOnPublish="False"
/p:MsDeployPublishMethod="WMSVC"
/p:AllowUntrustedCertificate="True"
/p:UserName="Deploy_User_For_TFS"
/p:Password="P@ssw0rd"
/p:AutoParameterizationWebConfigConnectionStrings=False
/p:ExcludeFilesFromDeployment="Cache"
目前我有4个TFS Build配置(每个发布配置文件一个)和一个文件,其中包含MSDeployServiceURL参数的所有可能值。
这种方法存在两个问题:
AutoParameterizationWebConfigConnectionStrings
时,我们必须在 4个地方而不是一个地方更改它。所以我有两个问题:
答案 0 :(得分:1)
有没有办法让我可以指定一个通用模板 只有我的参数配置和列表可能 MSDeployServiceURLs和其他一切保持不变?有 这样的模板应该解决问题#1。
您可以简化,以便发布配置创建模板化的发布配置文件。然后使用TFS's release management,您可以使用适当的值更新发布配置文件。根据您的描述,您似乎正在尝试将编译和发布结合起来。
例如,在TFS中,您可以使用一个构建版本(例如,MyApp-Release
)来构建发布配置中的代码。作为该过程的一部分,它会传递占位符,例如部署URL。例如,/p:MSDeployServiceURL="$(MSDeployServiceURL)"
将为/p:MSDeployServiceURL="__MSDeployServiceURL__"
。
在TFS版本中,您可以在发布配置文件中替换令牌(如果需要,可以使用Colin's ALM Corner Custom Build Tasks)。然后,替换令牌任务将使用具有相同名称的发布环境变量(减去下划线)中的值更新__MSDeployServiceURL__
。因此,您的发布版本将具有dev
,test
,demo
和prod
环境,并且对于每个环境,每个环境中都会有一个名为MSDeployServerURL
的变量一个不同的值和替换令牌步骤。