如何从 DevOps 更改多个 XML 元素内容

Posted

技术标签:

【中文标题】如何从 DevOps 更改多个 XML 元素内容【英文标题】:How to change multiple XML element contents from DevOps 【发布时间】:2021-02-28 02:46:31 【问题描述】:

我有一个包含以下元素的 web.config 文件:

<client>
 <endpoint address="url_1" />
 <endpoint address="url_2" />
 <endpoint address="url_3" />
</client>

现在,我想根据我要部署到的环境来更改它。我已经创建了一个发布管道,可以部署到我在 Azure 上的开发和生产环境,我正在使用 XML Variable Substitution 来更改我需要的任何变量,例如我的生产环境中的 connectionString。

我也想在我的 PROD 环境中更改 web.config 文件中的 3 个端点元素内容。

例如,它在各自的环境中应该是这样的:

开发者:

<client>
 <endpoint address="url_1" />
 <endpoint address="url_2" />
 <endpoint address="url_3" />
</client>

产品:

<client>
 <endpoint address="url_4" />
 <endpoint address="url_5" />
 <endpoint address="url_6" />
</client>

我查看了XML File Transformation,但不想添加到文件中。我想删除url_1, url_2, url_3 并用url_4, url_5, url_6 替换它们

发布管道上是否有办法在不破坏我已添加到位的变量替换的情况下完成此任务?

【问题讨论】:

【参考方案1】:

根据您的描述,如果您想在运行管道的过程中更改多个 XML 元素的内容,我建议您使用扩展任务 Magic Chunks。此任务可以在构建过程中转换配置文件。

您可以将Magic Chunks 任务安装到您的组织,然后将其添加到您的管道中。它使用以下魔术块任务的示例设置测试了您的 web.config:

关于参数Pathtransformations:您需要指定自己的配置文件路径和所需的transformations。

下面是我的测试,大家可以参考一下:

管道运行成功后,我们查看神器文件,发现配置文件中的元素发生了变化。

【讨论】:

如何使用魔法块来改变多行?我可以添加一个 JSON 配置行,以某种方式将其与 name 属性匹配并更改地址属性值吗? 您可以使用魔法块来更改多行。例如: "key1": "value1", "key2": "value2" Magic Chunks 是一款易于使用的工具,可以配置 JSON、XML 和 YAML 的转换。【参考方案2】:

您可以使用Replace tokens task 来实现此目的。请注意,您必须将这些变量值保存在管道/变量组中。 例如:url1 的值将是 url_1 范围为 Dev Stage。

XML 文件设置:

<client>
 <endpoint address="#url1#" />
 <endpoint address="#url2#" />
 <endpoint address="#url3#" />
</client>

结果:

开发人员:

<client>
 <endpoint address="url_1" />
 <endpoint address="url_2" />
 <endpoint address="url_3" />
</client>

产品:

<client>
 <endpoint address="url_4" />
 <endpoint address="url_5" />
 <endpoint address="url_6" />
</client>

【讨论】:

以上是关于如何从 DevOps 更改多个 XML 元素内容的主要内容,如果未能解决你的问题,请参考以下文章

Mirth channel XML:如何从元素内部读取多个值

当我们有多个同名但属性不同的元素时,如何使用 Xdocument 从 xml 中删除一个元素

Azure DevOps 管道“查看更改”显示错误的更改数量

更改 XML 文件中的元素内容

如何使用 C#4.0 从 xml 内容中删除特定的 xml 元素?

如何通过每个数组值更改多个元素?