【发布时间】:2018-06-12 13:55:48
【问题描述】:
我在 vsts 中发布了一些环境变量。
其中一个环境变量如下:
#Array
[ { "name":"password", "value":"thisismypassword" }, { ... } ]
但是,我从一个返回密码的发布任务中获得了一个输出参数。所以我想制作一个“标签”并在输出参数返回时替换它:
[ { "name":"password", "value":"<Password>" } ]
当我的输出参数返回时,我可以创建一个 powershell 任务来用真实密码替换“标签”。但是要替换,它应该是字符串或有效的 powershell 数组。如果我直接使用环境变量,它会在第一个“:”处中断并显示错误消息(因为它不是合法的 powershell 命令/格式);
#This breaks
$var = $(environment_variable)
因此我想将其转换为字符串,替换它,将其转换回 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" } ]
【问题讨论】:
-
您希望环境变量
password何时显示为标记,何时显示具有实际值的变量?你不能使用日志命令(docs.microsoft.com/en-us/vsts/pipelines/build/…)在thisismypassword和<Password>之间更改变量password的值吗? -
@MarinaLiu-MSFT 我说的是发布管道,我不完全理解您使用 logging 命令的意思。
-
是否要实现在执行任务时显示值为
thisismypassword的变量password并在执行另一个任务时显示值为<Password>? -
@MarinaLiu-MSFT 不,我从另一个任务的输出中获得了真实密码。标签
应替换为任务后可用的输出密码。 -
所以在显示真实密码的任务之后,你可以添加一个
Write-Host "##vso[task.setvariable variable=password]<Password>"的powershell任务来更改值,然后下面的任务将显示值为<Password>的变量。
标签: powershell environment-variables azure-pipelines-release-pipeline