如何使用 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 从管道中获取所有变量?的主要内容,如果未能解决你的问题,请参考以下文章