【问题标题】:How to get all variables from a pipeline using the Azure REST API?如何使用 Azure REST API 从管道中获取所有变量?
【发布时间】:2022-01-23 21:21:17
【问题描述】:

我有一个包含变量列表的主 ADO 管道,我还有一个在主管道完成后将被触发的第二个管道。在第二个管道中,我尝试调用 Azure Rest API 以从主管道中获取所有变量,然后在第二个管道中的后续作业中使用。

我的 PowerShell 脚本如下所示:

steps:
- powershell: |
    $uri = "https://dev.azure.com/$(System.CollectionUri)/$(System.TeamProject)/_apis/pipelines/1288/runs?api-version=6.1-preview.1"
    Invoke-RestMethod -Method Get -Uri "$uri" -UseDefaultCredentials

这给了我一个错误提示:找不到资源。

我想我只是误解了如何使用这个 API。如何从特定管道中检索所有变量?

【问题讨论】:

  • 在我的代码中确实如此,编辑了帖子以反映。实际上错误响应是它找不到资源。我知道 uri 中的变量是正确的,因为我在另一个管道中使用它们。可能是我需要一个令牌还是标题?
  • 如果您使用的是$(System.CollectionUri),那么您不需要在此之前包含 uri 字符串的部分;它已经具有类似https://dev.azure.com/fabrikamfiber/ 的值
  • 如果我删除 $(System.CollectionUri),我会收到同样的错误,说它找不到,但我也只是硬编码了值和管道传递,但它从 ADO 主页返回 html。

标签: powershell azure-devops yaml azure-pipelines azure-powershell


【解决方案1】:

简而言之:您需要对 API 调用进行身份验证;您可以使用内置的$(System.AccessToken) 来执行此操作。

有一个predefined variable, System.AccessToken,它带有您的服务身份的凭据。您需要将其包含在 API 调用的标头中以进行身份​​验证。

$headers = @{ Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("user:$($System.AccessToken)")) };
Invoke-RestMethod -Method Get -Uri $uri -Headers $headers

注意:API 调用可能还需要设置其他标志,例如 ContentType ;我建议您阅读Azure DevOps REST API 上的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多