Azure DevOps rest api 获取发布定义不包含变量
Azure DevOps rest api get release definition does not include variables
我写了一个小的 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
我正在使用 https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions/{definitionId}?api-version=5.1
并且包含变量和变量组。
请将脚本的最后一行修改为:
write-host "results = $($release | ConvertTo-Json -Depth 100)"
然后你会从它的结果中看到详细的定义。
当我们给API相应的响应时,其实就是一个嵌套数组。这意味着如果你只是使用 Write-Host $result
打印出响应,那么它只能给你第一级。
您必须先使用ConvertTo-Json -Depth ***
转换响应(ConvertTo-Json
),然后指定您希望它们在JSON中显示多少层包含的对象(-Depth ***
).
这里,在你的issue中,对应的已经回复了,但是因为嵌套的原因被隐藏了。所以,只需要使用上面的脚本展开嵌套的arrays/objects。
我写了一个小的 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
我正在使用 https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions/{definitionId}?api-version=5.1
并且包含变量和变量组。
请将脚本的最后一行修改为:
write-host "results = $($release | ConvertTo-Json -Depth 100)"
然后你会从它的结果中看到详细的定义。
当我们给API相应的响应时,其实就是一个嵌套数组。这意味着如果你只是使用 Write-Host $result
打印出响应,那么它只能给你第一级。
您必须先使用ConvertTo-Json -Depth ***
转换响应(ConvertTo-Json
),然后指定您希望它们在JSON中显示多少层包含的对象(-Depth ***
).
这里,在你的issue中,对应的已经回复了,但是因为嵌套的原因被隐藏了。所以,只需要使用上面的脚本展开嵌套的arrays/objects。