如何在 VSTS 发布管理中处理多个配置?

How to handle multiple configurations in VSTS Release management?

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

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

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

问题是,发布是与测试一起为测试环境创建的 Web.config。将此构建移至暂存环境的一般方法是什么?为此,我需要 Staging Web.config。我应该总是构建 3 次并保留这些工件吗?这意味着很多 artifacts/diskspace 用于大部分时间不会部署的构建。

MSDN 好像没有给我答案。有什么想法吗?

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

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

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

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

1.3 在选项选项卡下,在右侧启用多配置。

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

1.5 在“任务”选项卡下,select 生成任务。

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

1.7 仍在“任务”选项卡下,select 发布工件任务。

1.8 将BuildConfiguration 变量添加到Path to Publish 字段中指定的路径。这再次意味着当工件被丢弃以供发布过程拾取它们时,每个配置都有自己的子文件夹。同样,在此上下文中,BuildConfiguration 变量被指定为 $(BuildConfiguration).

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

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

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

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

2.2。在“环境”选项卡下,select 您要配置的环境。这个例子展示了我配置开发环境。

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

2.3。 Select 复制文件任务。

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

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

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

我希望这对其他人有所帮助!

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

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

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

我所做工作的要点在我的发布配置中的 Marketplace 中进行了详细说明 here, but whereas the author of that article uses a tool called Tokenizer installed on his on-premises TFS box, I've used the very nice Tokenization Task,以转换我在 Web.config 文件中使用的令牌。