如何在TFS中管理大量类似的配置

时间:2017-08-08 12:01:16

标签: deployment tfs msbuild msdeploy tfs2017

我有一个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参数的所有可能值。

这种方法存在两个问题:

  1. 当我们必须添加新参数AutoParameterizationWebConfigConnectionStrings时,我们必须在 4个地方而不是一个地方更改它。
  2. 我们必须有一个共享文件作为参数的来源。要理解应该复制哪些价值并且人们经常犯错误并不容易。
  3. 所以我有两个问题:

    1. 有没有办法有一个通用模板,我只能指定我的参数配置和可能的 MSDeployServiceURL 的列表,并让其他一切保持不变?拥有这样的模板应该可以解决问题#1。
    2. 有没有办法定义一个类似下拉的变量,用户无法输入值,但是应该从预定义的值列表中选择?

1 个答案:

答案 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__。因此,您的发布版本将具有devtestdemoprod环境,并且对于每个环境,每个环境中都会有一个名为MSDeployServerURL的变量一个不同的值和替换令牌步骤。