如何通过 api 获取 Azure Devops/TFS 中特定构建中使用的变量

How to GET variables used in a specific BUILD in Azure Devops / TFS via api

在 Azure Devops 的构建和发布管道中,我通过 api 触发其他管道。

我正在尝试让我的发布管道收集在关联构建期间发现/使用的自定义变量。

我能够通过 get api 获取构建列表,并且我能够生成其他构建并将参数传递给它们。

虽然我可以通过 api 生成一个版本,但我一直未能成功传递参数...或在创建版本时按需获取参数。

我查看了 Microsoft 的文档并成功地通过 api 使用自定义参数对构建进行了排队,并创建了没有自定义参数的版本。

[String]$buildID = "$env:BUILD_BUILDID"
[String]$project = "$env:SYSTEM_TEAMPROJECT"
[String]$projecturi = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
[String]$alias = "drop"

$headers = @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
$url= $projecturi + $project + "/_apis/release/releases?api-version=5.0-preview"

$JSON = @"
{
  "definitionId": 9,
  "description": "Testing API Release",
  "artifacts": [
    {
      "alias": "$alias",
      "instanceReference": {
        "id": "$buildID",
        "name": null
      }
    }
  ],
  "isDraft": false,
  "reason": "none",
  "manualEnvironments": null
}
"@

Write-Host $url
$responseRelease = Invoke-RestMethod -Uri $url -headers $headers -Method Post -ContentType "application/json" -Body $JSON

Write-Host $responseRelease

当前代码的结果创建了一个版本,但不传递自定义变量(或从已完成的构建中获取自定义变量)。我宁愿通过或收获它们,也不愿重新计算它们。

首先,正如您在评论中提到的,部署发布时无法直接更改变量。作为路线图上的用户声音:

Change release variables' value when deploy a release

https://developercommunity.visualstudio.com/idea/365596/change-release-variables-value-when-deploy-a-relea.html.

根据您的描述,您似乎想从 Release 定义中访问 Build 变量。目前这也不是内置功能。

作为解决方法,请尝试使用此第 3 方 Azure DevOps 扩展 Variable Tools for Azure DevOps Services

在 "build pipeline" 中,您可以使用 "save variables" 创建一个 JSON 文件。此文件需要作为工件或与现有工件一起发布。

在 "release pipeline" 中,您可以使用 JSON 文件中的 "load variables" 恢复变量。

另一种方法是将变量的值存储在 Variable Group 和 link 变量组中到您的发布定义中。

发布时,可以先获取变量组,过滤变量group-$(Build.BuildId)下的变量。