如何使用 Azure REST API 从管道中获取所有变量?

Posted

技术标签:

【中文标题】如何使用 Azure REST API 从管道中获取所有变量?【英文标题】:How to get all variables from a pipeline using the 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 【参考方案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 上的文档。

【讨论】:

以上是关于如何使用 Azure REST API 从管道中获取所有变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 REST API 创建 Azure 搜索索引器

调用Azure REST API时如何使用分页

使用 rest api 从 Web 应用程序将文件上传到 Azure 文件存储

使用 Rest Api 查询 Azure 表存储

1如何使用Azure Rest API创建虚拟机

Azure Rest API 附加现有托管磁盘