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

时间:2018-07-04 10:21:47

标签: azure azure-devops azure-pipelines azure-pipelines-release-pipeline continuous-delivery

在将构建部署到UAT,生产等多个环境时。我想用config.json替换一个文件config.uat.json或config.prod.json。有没有其他选择?就像我们有XML Transformation。

我知道Json变量替换,但是由于变量列表很长(将近50个条目),所以这并不能满足我的目的

预先感谢!

2 个答案:

答案 0 :(得分:2)

JSON variable substitution应该是一个不错的选择,如果您不想在Variables标签上一个一个地添加变量,则可以使用VSTS REST API对其进行更新,或者添加一个powershell脚本来进行设置变量。

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

答案 1 :(得分:0)

在您的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;