Octopus 在 appsettings.json 中部署变量替换

问题描述

如何在不加引号的情况下替换 json 变量? appsettings.json 包含服务器名称列表,server:names 是需要在部署时替换的 Octopus 部署变量。

{
"server":
    {
        "names":  [ "#{server:names| Jsonescape}" ]
    }
}

Octopus 变量配置如下: server:names 值:"server_x","server_y"

名称替换后的结果应该是:

"names":  [ "server_x","server_y" ]

但是我得到以下结果,这使得 json 文件无效:

"names":  [ ""server_x","server_y"" ] 

Appsettings.json 需要引号,但应替换为 Octopus Deploy。我无法使用 Json Configuration Variables 功能,它需要替换变量。

有什么想法我会怎么做吗?

解决方法

如果你不能使用 Json 配置变量(现在结构化配置变量功能),我认为要走的路是:

  • 将变量值更改为 ["server_x","server_y"]
  • 将 JSON 文件中的行更改为 "names": #{server:names}

注意:JsonEscape 用于转义将进入 JSON 字符串的值,而不是完整的 JSON 元素或节点。

如果您需要对服务器名称进行转义,您可能需要单独为服务器名称执行此操作。

在您的原始示例中,您可以删除额外的 "s 以获得有效的 JSON。或者使用我上面没有 JsonEscape 的示例生成预期的结构。

Screenshot of script

Screenshot of output

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...