如何替换 VSTS CD 中发布的 json 文件?

How to replace json file in release in VSTS CD?

在将构建部署到多个环境(如 UAT、生产环境)时。我想用 config.json 替换一个文件 config.uat.json 或 config.prod.json。有没有可用的选项?就像我们有 XML 转换一样。

我知道 Json 变量替换,但这不符合我的目的,因为变量列表很长(将近 50 个条目)

提前致谢!

在您的 Program.cs 文件中,您可以获得一个代表您当前环境的环境变量:

var builder = WebHost.CreateDefaultBuilder(args);
var currentEnv = builder.GetSetting("environnement");

使用此 currentEnv 值,您将能够加载文件 config.{currentEnv}.json

builder.AddJsonFile($"config.{currentEnv}.json", optional: false, reloadOnChange: true);

编辑:

如果您想在 powershell 中执行此操作,您可以使用默认配置文件进行转换:appsettings.json 包含密钥,appsettings.env.json 包含覆盖。

要转换您的配置,您可以这样做:

Param(
   [Parameter(Mandatory=$true)][string]$SpecificConfig
)
$defaultConfig = "AppSettings.json";
$settingsContent = ConvertFrom-Json $defaultConfig;
$specificContent = ConvertFrom-Json $SpecificConfig;

# Do this on each <property> to override
if (![string]::IsNullOrEmpty($specificContent.<property>))
{
    $settingsContent.<property> = $specificContent.<property>;
}
Write-Host $settingsContent > $defaultConfig;

JSON variable substitution 应该是一个不错的选择,如果你不想在 Variables 选项卡上一个一个地添加变量,你可以使用 VSTS REST API 更新它们,或者添加一个 powershell 脚本来设置变量。

否则,您可能需要删除config.uat.json或config.prod.json,并将config.json复制到目标机器。