我正在建立一个新管道,我希望它具有尽可能的动态性。我需要解决的第一件事是查找机制,该机制将使我具有动态变量。我考虑了几种方法或方法。
问题:
我想问问是否有任何选择如何在发行期间创建新的管道变量?我知道有可能更新已经创建的管道变量,但我很好奇是否有可能创建新变量?
答案 0 :(得分:0)
开始发行时不支持添加新变量。
解决方法是,您可以在变量中定义动态变量,并在所有任务之前添加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创建发布和更新变量的简单方法:
答案 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"
}