【问题标题】:How to handle multiple configurations in VSTS Release management?如何在 VSTS 发布管理中处理多个配置?
【发布时间】:2016-09-05 08:05:15
【问题描述】:

对于我们的项目,我们使用 Visual Studio Team Services 来维护代码和构建。对于这个项目,我还想设置发布管理。 (https://www.visualstudio.com/en-us/features/release-management-vs.aspx)

对于测试、暂存和生产环境,我们有不同的 Web.config 文件,这些文件针对特定环境进行了转换。

我确实设置如下(MSBuild 构建步骤):

  • 正在运行一个几乎完整的构建,它正在为云服务部署 ServiceConfiguration.cscfg 和 DeploymentPackage.cspkg (/t:Publish) 和目标环境测试 (/ p:TargetProfile=测试)
  • 工件随 VSTS 构建任务一起发布,以支持使用 Release Management 进行部署。
  • 在夜间构建成功后,会创建一个版本,下载工件并自动部署到测试环境。

问题是,该版本是为测试环境与测试 Web.config 一起创建的。将此构建移动到暂存环境的一般方法是什么?为此,我需要 Staging Web.config。我是否应该始终构建 3 次并保留这些工件?这将意味着大部分时间都不会部署的构建的大量工件/磁盘空间。

MSDN 似乎没有给我答案。有什么想法吗?

【问题讨论】:

  • @Richard,你找到解决方案了吗?我有类似的问题,找不到任何具体的例子
  • 我没有找到真正干净的解决方案。我是什么,我为所有目标环境单独构建我的解决方案。构建成功后,我发布每个构建的工件。使用这种方法,我有多个部署包,并且你们都有自己的配置。

标签: visual-studio azure-devops azure-pipelines


【解决方案1】:

我知道这篇文章发布已经快一年了,但我只需要为自己找出同样问题的答案,所以我就是这样做的。我们使用的是 VSTS,所以它可能与本地 TFS 略有不同,我不知道。

1。在构建定义中配置多个配置

1.1 打开构建定义进行编辑。

1.2 在“变量”选项卡下,编辑BuildConfiguration 变量的值(如果该变量不存在,请添加该变量),使其成为您希望构建的各种配置的逗号分隔列表。这些值中的每一个都必须对应于源代码中的配置。在我的示例中,我有三种配置 - 开发、测试和暂存。在我的代码中,每个配置都有自己的 web.config 转换文件,指定不同的数据库连接字符串等等。

1.3 在 Options 选项卡下,在右侧启用 Multi-configuration。

1.4 在多重配置设置中,在Multipliers 字段中输入BuildConfiguration 变量的名称。这必须与您在步骤 1.2 中为其设置值的变量的名称完全匹配。在我的示例中,您可以看到我还选中了 Parallel 框,并且效果很好。我想如果您遇到问题,您可以取消选中此项。

1.5 在 Tasks 选项卡下,选择 Build 任务。

1.6 在构建任务的选项中,您需要更新MSBuild Arguments 字段,以便输出目录包含BuildConfiguration 变量。这样,Build 任务将为每个配置创建一个单独的输出目录。在这种情况下,BuildConfiguration 变量被指定为$(BuildConfiguration)

1.7 仍然在 Tasks 选项卡下,选择 Publish Artifact 任务。

1.8 将BuildConfiguration 变量添加到Path to Publish 字段中指定的路径。这再次意味着,当工件被删除准备好发布过程来拾取它们时,每个配置都有自己的子文件夹。同样,在这种情况下,BuildConfiguration 变量被指定为$(BuildConfiguration)

1.9 将 Artifact Name 字段的值更改为 BuildConfiguration 变量 - 再次,这里是 $(BuildConfiguration)

2。为多个配置配置发布定义

根据您的要求,这部分可能不是必需的,但无论如何我都会包含它。这就是我在发布定义中创建多个环境的方式,每个环境都使用与构建过程不同的配置。

2.1。打开您的发布定义进行编辑。

2.2。在 Environments 选项卡下,选择您要配置的环境。这个例子展示了我如何配置开发环境。

我正在使用复制文件任务来发布我的 Web 应用程序。您可能使用了不同的方法,但如果您使用不同的方法,希望这足以为您指明正确的方向。

2.3。选择复制文件任务。

2.4。修改 Source 字段的值,使其包含包含适合您正在配置的环境的构建配置的子文件夹。

2.5。继续并根据您的要求配置其余的环境设置 - 机器(您将文件发布到的服务器)等。至少 Destination Folder 字段对于您的每个环境都必然不同。 Machines 字段也可能会有所不同。

如果您在对新构建进行排队时看起来像这样,您就会知道您的构建过程正在正确构建多个配置。注意左侧的多个配置:

我希望这可以帮助其他人完成这项工作!

更新 上述解决方案似乎运作良好。然而,随着我部署我们的一个应用程序的环境数量的增加(目前有 10 个并且还在增加),我开始寻找另一种方法来为每个环境转换 Web.config,因为唯一实际的环境之间的区别在于数据库连接字符串。

这导致我放弃了上述解决方案。相反,我们的构建过程现在只使用一个Web.config 转换(而不是每个环境一个),它删除了调试属性并将数据库连接字符串替换为标记化版本,其中数据库服务器、名称等是标记将由部署过程填充。

这更整洁。我们的代码现在只包含一个Web.config 转换,我们的构建过程现在要快得多,因为我们没有为每个环境生成构建,并且数据库密码等被存储、加密,作为发布配置中的变量。

我所做的事情的要点是详细的 here,但是虽然那篇文章的作者使用了一个名为 Tokenizer 的工具,安装在他的本地 TFS 机器上,但我使用了非常好的 Tokenization Task 来自我的发布配置中的市场,用于转换我在 Web.config 文件中使用的令牌。

【讨论】:

  • 我检查这个问题已经有一段时间了。我很确定当我发布这个问题时这个功能不可用,但它正是我想要的。感谢您的回答。
  • 微软最近似乎将乘数字段移至阶段的选项选项卡。
  • 自 2020 年 Azure Devops 起,Multi-Configuration 面板不再位于“选项”选项卡上。您现在将其添加到Execution plan 下的代理;在那里选择Multi-Configuration
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多