Azure devops VSTS(Azure DevOps)管道中的动态变量名
我有一个管道变量,名为Azure devops VSTS(Azure DevOps)管道中的动态变量名,azure-devops,azure-powershell,Azure Devops,Azure Powershell,我有一个管道变量,名为TestVariable 我可以通过PS脚本轻松访问此变量,如下所示: write-host $(TestVariable) 但是,如果该变量的名称是动态的,有什么方法可以从PS访问变量值吗 例如,变量的名称将进入字符串变量。我尝试了这些组合作为实验…它们只返回变量名,而不是值(毫不奇怪): 我想答案是否定的,但我想确定。非常感谢任何帮助 编辑注释 两个答案都回答了问题,但不能解决我的问题。在尝试了这些解决方案之后,我意识到我错过了一个额外的复杂问题,不幸的是,这些问题的
TestVariable
我可以通过PS脚本轻松访问此变量,如下所示:
write-host $(TestVariable)
但是,如果该变量的名称是动态的,有什么方法可以从PS访问变量值吗
例如,变量的名称将进入字符串变量。我尝试了这些组合作为实验…它们只返回变量名,而不是值(毫不奇怪):
我想答案是否定的,但我想确定。非常感谢任何帮助
编辑注释
两个答案都回答了问题,但不能解决我的问题。在尝试了这些解决方案之后,我意识到我错过了一个额外的复杂问题,不幸的是,这些问题的答案对解决这些问题没有帮助。我在这里记下,以防有人试图做类似的事情
额外的复杂性是,变量的值是在发布期间设置的(我试图访问ARM模板输出变量)
我想我可以点击API并获取“live”变量值,但不幸的是,在发布完成之前,发布数据(来自API)并不存在
因此,当我在发布期间调用此选项时:
{company}/{project}/_api/release/release/$($releaseId)?api版本=5.0
我得到“ID为38的版本不存在”。这在YAML中不可能直接实现,但您可以使用例如az cli。有了它,您可以通过编程设置一个变量名并获取它的值
$variableName=“一些”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
$variableName=“测试”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
现在,您可以在powershell任务中使用此代码来获取变量的值
您有如何安装扩展的信息。这在YAML中不可能直接实现,但您可以使用例如az cli。有了它,您可以通过编程设置一个变量名并获取它的值
$variableName=“一些”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
$variableName=“测试”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
现在,您可以在powershell任务中使用此代码来获取变量的值
您有如何安装扩展的信息
VSTS(Azure DevOps)管道中的动态变量名
同意Krzysztof Madej的观点。没有现成的方法来实现这一点
这是因为(比如$($varname)
在构建管道中还不受支持
要解决此问题,可以使用获取动态变量的值:
GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1
下面是我的测试powershell脚本:
$varname="TestVariable"
$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$VFDV= $pipeline.variables.$varname.value
Write-Host This is Value For Dynamic Variable: $VFDV
$varname=“TestVariable”
$url=”https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/?api-版本=5.0“
写入主机“URL:$URL”
$pipeline=Invoke RestMethod-Uri$url-Headers@{
Authorization=“Bearer$env:SYSTEM\u ACCESSTOKEN”
}
$VFDV=$pipeline.variables.$varname.value
Write Host这是动态变量的值:$VFDV
输出:
希望这有帮助
VSTS(Azure DevOps)管道中的动态变量名
同意Krzysztof Madej的观点。实现这一点没有现成的方法
这是因为(比如$($varname)
在构建管道中还不受支持
要解决此问题,可以使用获取动态变量的值:
GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1
下面是我的测试powershell脚本:
$varname="TestVariable"
$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
$VFDV= $pipeline.variables.$varname.value
Write-Host This is Value For Dynamic Variable: $VFDV
$varname=“TestVariable”
$url=”https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/?api-版本=5.0“
写入主机“URL:$URL”
$pipeline=Invoke RestMethod-Uri$url-Headers@{
Authorization=“Bearer$env:SYSTEM\u ACCESSTOKEN”
}
$VFDV=$pipeline.variables.$varname.value
Write Host这是动态变量的值:$VFDV
输出:
希望这有帮助。晚会迟到了,但我想和大家分享一下这个数字 如中所述,管道变量可以通过 环境变量。虽然在任务开始之前处理$(varname),但可以在运行中调用$env:varname。因此,您可以使用以下方法进行欺骗:
Write-Host ('$env:'+"$(varname)" | Invoke-Expression)
任务将在任务开始之前将$(varname)解析为其值
Write-Host ("$env:TestVariable" | Invoke-Expression)
它将发出与调用$(TestVariable)相同的结果
虽然你确实需要遵守规则,比如“和”。“->”派对迟到,但我还是愿意分享这个数字 如中所述,管道变量可以通过 环境变量。虽然在任务开始之前处理$(varname),但可以在运行中调用$env:varname。因此,您可以使用以下方法进行欺骗:
Write-Host ('$env:'+"$(varname)" | Invoke-Expression)
任务将在任务开始之前将$(varname)解析为其值
Write-Host ("$env:TestVariable" | Invoke-Expression)
它将发出与调用$(TestVariable)相同的结果
尽管您确实需要遵守规则,例如“和”。“->”.问题如何?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助其他遇到相同问题的社区成员,我们可以存档此线程,谢谢。如果不是,请告诉我们您是否需要进一步的帮助。看起来很有希望,明天将有时间测试。谢谢!两者都有答案值得打勾,因为它们都有效,这只是选择使用哪种方法。问题如何?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助其他社区成员解决同样的问题,我们可以存档此线程,谢谢。如果不是,请让我们知道您是否愿意