我想在 Azure DevOps 中使用 InvokeRESTAPI@1 任务 来查询 Azure DevOps API 本身(在同一组织、同一项目中)。这应该能够使用内置的 Azure 管道令牌,而不需要单独的 serviceConnection。然而我只能直接得到
Nothing to show. Final logs are missing. This can happen when the job is cancelled or times out.
。所以我认为某些设置是错误的。
这就是我的任务的样子(我用curl测试了一些虚拟的api调用)。
- task: InvokeRESTAPI@1
displayName: Check builds
continueOnError: true
inputs:
connectionType: 'connectedServiceName'
method: 'GET'
urlSuffix: '/myorg/myproject/_apis/build/builds?api-version=6.0'
headers: |
{
"Content-Type": "application/json"
}
waitForCompletion: 'true'
使用管道中的
InvokeRESTAPI
任务调用 Azure DevOps REST API 时:
use the built-in Azure pipeline token
✔️
System.AccessToken
来访问同一组织内的资源。
not require a separate serviceConnection
✖️
不,即使资源位于同一组织或同一项目内,也需要通用服务连接。请参阅 InvokeRESTAPI
任务的
输入。
对于您的情况,要使用
InvokeRESTAPI
任务调用 Azure DevOps REST API 来查询同一组织内的构建,您可以执行以下操作:
首先,进入“项目设置”>“服务连接”,设置一个新的通用服务连接,如下图所示。 “
Server URL
”的值应该是API的HTTP URI的前缀。它至少应包含前缀“https://dev.azure.com
”。
然后进入管道配置
InvokeRESTAPI
任务,如下所示。
要使用内置的
System.AccessToken
来调用API,您可以如下设置标题。
{
. . .
"Authorization": "Bearer $(system.AccessToken)"
}
urlSuffix
的值应该是API的HTTP URI的其余部分,不包含在通用服务连接上设置的前缀。确保前缀和 urlSuffix
可以组合成 API 的完整 HTTP URI,没有字符少或多。
例如:
完整的 HTTP URI 是,
https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.0
如果通用服务连接上设置的前缀是,
https://dev.azure.com
那么,
urlSuffix
应该是,
/{organization}/{project}/_apis/build/builds?api-version=7.0
以下为参考范例。
jobs:
- job: Agentless
pool: server
steps:
- task: InvokeRESTAPI@1
displayName: 'Invoke REST API'
inputs:
connectionType: 'connectedServiceName'
serviceConnection: 'AdoGeneric'
method: 'GET'
headers: |
{
"Content-Type":"application/json",
"Authorization": "Bearer $(system.AccessToken)"
}
urlSuffix: '/{organization}/{project}/_apis/build/builds?api-version=7.0'
waitForCompletion: 'false'