Octopus 在数组中部署条件变量替换

Octopus Deploy conditional variable substitution in an array

背景

我在一个项目中使用 Octopus Deploy,其中一个进程中有 Json 配置变量替换。我贡献的 Asp.net 核心项目从 Json 配置中获取 url 和名称,并添加 HttpClient 实例以到达多个端点。

json 看起来像这样:

 "HttpClientFactoryServices": [
    {
      "Name": "ServiceX",
      "Url": "http://serviceXurl"
    },
    {
      "Name": "ServiceY",
      "Url": "http://serviceYurl"
    },
    {
      "Name": "ServiceZ",
      "Url": "http://serviceZurl"
    }
  ] 

我想根据 QA 和 Prod 环境编辑这些 Url 部分。 (八达通)

我知道 Octopus 中有一个数组对象替换 documentation,但我不方便说

HttpClientFactoryServices:0 = {"name":"ServiceX", "url":...}

HttpClientFactoryServices:1 = {"name":"ServiceY", "url":...}

由于数组可以更改,因此它所包含的对象将来可以具有不同的结构。而且它看起来像是一种解决方法而不是正确的方法。

问题 有没有办法告诉八达通“在数组中的名称属性中找到具有ServiceX值的对象,并将其“Url”属性设置为http://serviceX-如果是QA环境就QA,如果是Prod环境就http://serviceX-prod?

或者您是否建议我更改 HttpClient 和 Json 配置的方法?

附加信息: 在切换到 Json 配置中的对象数组之前,我曾经在 HttpClientFactoryServices 下保存嵌套对象。在八达通中很容易给它们添加 属性 值,即:

HttpClientFactoryServices:ServiceX:Url = "http://serviceX"

但是在项目代码中,我必须编写代码“从 Json 获取 serviceX,读取其 Url,将其添加为名为 ServiceX 的 httpClient 命名服务”。遍历一系列服务看起来更好。

披露:我为 Octopus Deploy 工作。

此处最简单的解决方案是使用 "Substitute Variables in Files" 功能,而不是 "JSON Configuration Variables"。我们有一些关于该功能的文档 here.

简单地说,您可以在 JSON 文件中使用一个标记,例如 #{ServiceXUrl},在启用该功能并指定您想要转换的文件后,Octopus 会找到任何匹配的标记变量名,并用它们代替你。

请随时通过我们常用的支持渠道与我们联系,例如我们的支持论坛或电子邮件。 https://octopus.com/support

中的详细信息