【问题标题】:Octopus Deploy variable substitution in appsetings.json章鱼部署 appsettings.json 中的变量替换
【发布时间】:2021-03-19 15:34:03
【问题描述】:

如何在不将其放在引号中的情况下替换 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 .net-core octopus-deploy


    【解决方案1】:

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

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

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

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

    在您的原始示例中,您可以删除多余的 " 以获得有效的 JSON。或者使用我上面的示例而不使用 JsonEscape 会产生预期的结构。

    【讨论】:

    • 很遗憾,这不起作用,JSON 只接受成员名称作为双引号中的字符串。
    • 添加了有关答案的更多详细信息-原始示例文件中的额外 "s 在列表内容周围添加了 "s。 JsonEscape 对于您正在做的事情可能是必要的,也可能不是必要的,但如果您确实使用它,它将转义破坏 JSON 字符串的值。这并不意味着要转义整个 JSON 段。
    • 我无法删除 json 文件中的 "s,因为 VisualStudio 会给我这个警告 "JSON 属性名称应该是字符串,标识符属性名称在 JSON 中是不允许的"
    • 我的猜测是,当你试图将 JSON sn-p 替换为文件时,你必须忽略该警告。
    • @ryan.rousseau 谢谢,当我忽略 VS 中的警告时工作!
    猜你喜欢
    • 1970-01-01
    • 2017-05-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多