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

Is there option how create new pipeline variables in Azure devops via code

我正在建立一个新的管道,我希望它尽可能具有动态性。我需要解决的第一件事是找到允许我拥有动态变量的机制。我想过几种方法如何去做或如何管理它。

问题:

我想问问有没有什么选项可以在发布时创建新的管道变量?我知道可以更新已经创建的管道变量,但我很好奇是否可以创建新变量?

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

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

例如:

脚本:

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:

答案在这里。 此 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"
}