是否有选项如何通过代码在Azure devops中创建新的管道变量

时间:2019-07-19 06:12:04

标签: powershell azure-devops azure-pipelines-release-pipeline

我正在建立一个新管道,我希望它具有尽可能的动态性。我需要解决的第一件事是查找机制,该机制将使我具有动态变量。我考虑了几种方法或方法。

问题:

我想问问是否有任何选择如何在发行期间创建新的管道变量?我知道有可能更新已经创建的管道变量,但我很好奇是否有可能创建新变量?

2 个答案:

答案 0 :(得分:0)

开始发行时不支持添加新变量。

解决方法是,您可以在变量中定义动态变量,并在所有任务之前添加PowerShell任务以创建动态变量。之后,您可以在开始发行时更新此变量的值。

例如:

enter image description here

enter image description here 脚本:

Write-host "$(dyntest)"
$varObject = ConvertFrom-Json –InputObject "$(dyntest)"
$varObject.PSObject.Properties | foreach-object { $vn=$_.name;$vv=$_.value; Write-Host "##vso[task.setvariable variable=$vn]$vv"}

通过REST API创建发布和更新变量的简单方法:

enter image description here

答案 1 :(得分:0)

这是答案。 此api调用可以在已经开始的发行版中创建新的管道变量。

$urlget = "https://vsrm.dev.azure.com/{collection}/{project}/_apis/release/releases/$($env:RELEASE_RELEASEID)?api-version=5.0"

$getdef = Invoke-RestMethod -Method GET -UseDefaultCredentials -ContentType application/json -Uri $urlget -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}

$blockcvalue =@"
    {
      "value": "NEWVARIABLEVALUETEST"
    }
"@

$getdef.variables | add-member -Name "NEWVARIABLENAMETEST" -value (Convertfrom-Json $blockcvalue) -MemberType NoteProperty -Force -PassThru

$getdef = $getdef | ConvertTo-Json -Depth 100
$getdef | clip

$urlput = "https://vsrm.dev.azure.com/{collection}/{project}/_apis/release/releases/$($env:RELEASE_RELEASEID)?api-version=5.0"
$putdef = Invoke-RestMethod -Uri $urlput -Method PUT -Body $getdef -ContentType "application/json" -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}