2017-08-08 39 views
1

我有一个ASP .Net MVC应用程序,具有4种不同的发布配置文件:dev,test,demo和prod。如何管理TFS中的很多类似配置

这些发布配置文件是使用相同的两个步骤构建的:NuGet恢复,然后是MSBuild。然后,它们被部署到许多不同的服务器上:几台dev服务器(每个团队一台服务器),一台测试服务器,一台演示服务器和多台生产服务器。

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="[email protected]" 
     /p:AutoParameterizationWebConfigConnectionStrings=False 
     /p:ExcludeFilesFromDeployment="Cache" 

目前,我有4个TFS构建配置(一个为每个发布配置文件),并在那里我有所有MSDeployServiceURL参数的可能值的文件。

有两个问题,这种方法:

  1. 当我们不得不增加一个新的参数AutoParameterizationWebConfigConnectionStrings我们不得不改变它在4处而不是一个。
  2. 我们必须有一个共享文件作为参数的来源。理解哪些价值应该被复制并且人们经常犯错误并不容易。

所以我有两个问题:

  1. 有没有办法有一个通用模板,在那里我可以只指定我的参数配置和可能的MSDeployServiceURL的名单,并拥有一切保持原样?有这样的模板应该解决问题#1。
  2. 有没有办法定义下拉式变量,其中值不能由用户键入,但应该从预定义的值列表中选择?
+0

您是否通过Jacob的回答解决了这个问题?它解决了你的问题,你可以[接受它作为一个答案](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),这可以有益于其他社区会员阅读此主题。 –

+0

我们尝试过了,它比我们之前所做的更不方便:旧的配置很难理解和维护,但**易于使用**。并且提出的配置“看起来不错”,但是在实践中,为了发布它而构建一些东西很麻烦。 – DarkWalker

回答

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,demoprod环境,并且对于每个环境,都会有一个名为MSDeployServerURL的变量,每个变量具有不同的值和替换令牌步骤。