【问题标题】:Azure DevOps rest api get release definition does not include variablesAzure DevOps rest api get release 定义不包含变量
【发布时间】:2019-11-27 00:07:55
【问题描述】:

我写了一个小 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

【问题讨论】:

  • 你在使用 Azure DevOps 吗? TFS?如果是 TFS,什么版本的 TFS?变量包含在版本定义中,但请注意 secrets 是空白的。
  • 我正在使用 Azure DevOps,变量不是秘密

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


【解决方案1】:

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

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

然后你会从它的结果中看到详细的定义。


当我们给API对应的响应时,其实就是一个嵌套数组。这意味着如果您只是使用Write-Host $result 打印出响应,那么它只能给您第一级。

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

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

【讨论】:

  • 你完全正确!在我这样做之后,变量很好地显示出来。谢谢!
  • @E.Staal, 欢迎:-) , 你可以accept the answer
【解决方案2】:

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

【讨论】:

  • 您能否添加一个 Fiddler 请求-响应来比较差异...排除 PAT。
  • 我已将我的 powershell Invoke-RestMehthod 命令的输出添加到我的问题中。我也这么认为?
猜你喜欢
  • 2020-04-02
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 2019-08-30
  • 2020-06-12
  • 1970-01-01
  • 2019-08-24
相关资源
最近更新 更多