Azure DevOps Rest API获取发布定义不包含变量

时间:2019-11-25 09:09:38

标签: azure-devops azure-devops-rest-api

我写了一个小PowerShell脚本,它是一个发布定义。在这个定义上,我定义了一些变量。具有作用域版本以及特定环境的作用域。现在获得定义时,不包含这些变量。最终目标是能够使用API​​更改变量值。

*更新*

Merlin Liang完全正确。我只是没有正确打印结果。

这是我给其他相同代码的人:


$VariableValue = "test"
$VariableName = "test"

## Construct a basic auth head using PAT
function BasicAuthHeader()
{
    $ba = (":{0}" -f $env:SYSTEM_ACCESSTOKEN)
    $ba = [System.Text.Encoding]::UTF8.GetBytes($ba)
    $ba = [System.Convert]::ToBase64String($ba)
    $h = @{Authorization=("Basic{0}" -f $ba);ContentType="application/json"}

    return $h
}

$h = BasicAuthHeader 
$baseRMUri = $env:SYSTEM_TEAMFOUNDATIONSERVERURI + $env:SYSTEM_TEAMPROJECT
$releaseId = $env:RELEASE_RELEASEID

$getReleaseUri = $baseRMUri + "/_apis/release/definitions/30?api-version=5.1"

$release = Invoke-RestMethod -Uri $getReleaseUri -Headers $h -Method Get
# write-host "results = $($release | ConvertTo-Json -Depth 100)"

$release2 = $release | ConvertTo-Json -Depth 100 | ConvertFrom-JSON

$release2.variables.($VariableName).value = $VariableValue

$release2 = [Text.Encoding]::UTF8.GetBytes(($release2 | ConvertTo-Json -Depth 100))

$updateReleaseUri = $baseRMUri + "/_apis/release/definitions/30?api-version=5.1"

$content2 = Invoke-RestMethod -Uri $updateReleaseUri -Method Put -Headers $h -ContentType "application/json" -Body $release2 -Verbose -Debug

2 个答案:

答案 0 :(得分:1)

请将脚本的最后一行修改为:

write-host "results = $($release | ConvertTo-Json -Depth 100)"

然后您将在结果中看到详细的定义。


当我们给API相应的响应时,实际上,它是一个嵌套数组。这意味着,如果您仅使用Write-Host $result来打印响应,那么它只能给您第一级的信息。

您必须先使用ConvertTo-Json -Depth ***来转换响应(ConvertTo-Json),然后指定要显示在JSON中的对象包含多少级(-Depth ***)。

在您的问题中,对应的已被答复,但由于嵌套而被隐藏。因此,只需使用上述脚本展开嵌套的数组/对象

答案 1 :(得分:0)

我正在使用https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions/{definitionId}?api-version=5.1,其中包括变量和variableGroups。