VSTS版本 - 环境变量的“运行时”替换

时间:2018-06-12 13:55:49

标签: powershell environment-variables azure-pipelines-release-pipeline

我已经在包含一些环境变量的游戏中发布了。

其中一个环境变量如下:

#Array
[ { "name":"password", "value":"thisismypassword" }, { ... } ]

但是,我从其中一个返回密码的发布任务中获取输出参数。所以我想创建一个'标签'并在输出参数返回时替换它:

[ { "name":"password", "value":"<Password>" } ]

当我的输出参数返回时,我可以创建一个powershell任务,用真实密码替换'tag'。但是要替换它,它应该是字符串或有效的PowerShell数组。如果我直接使用环境变量,它会在第一个':'上打破一条错误消息(因为它不是一个合法的powershell命令/格式);

#This breaks    
$var = $(environment_variable) 

因此我想将它转换为String,替换它,将其转换回json对象并将其设置回环境变量:

$Setting = ConvertFrom-Json -InputObject '$(environment_variable)'
$Setting = $Setting -replace "<Password>", "$(Output_Password)"

#Tried both below
$Setting_JSON - ConvertTo-Json -InputObject $Setting
$Setting_JNSON = [Newtonsoft.Json.JsonConvert]::SerializeObject($Setting, [Newtonsoft.Json.Formatting]::None)

Write-Host "##vso[task.setvariable variable=$(environment_variable)]$Setting_JSON"

然而,这些产生的json字符串格式不同,使用此变量的步骤不明白;

#Output
["@{name=Password;value=thisisapasswordvalue}"]

#Expected (and needed) Output
[ { "name":"password", "value":"thisisapasswordvalue" } ]

1 个答案:

答案 0 :(得分:1)

#This breaks    
$var = $(environment_variable) 

为此,您可以使用:

$var = $Env:variablename

这适用于我:

$Setting = $env:Var1
$Setting = $Setting -replace "<Password>", "NewValue"