如何为Azure DevOps自己的REST API调用RESTAPI@1

问题描述 投票:0回答:1

我想在 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'
azure azure-devops continuous-integration
1个回答
0
投票

使用管道中的

InvokeRESTAPI
任务调用 Azure DevOps REST API 时:

  1. use the built-in Azure pipeline token
    ✔️

    正确,您可以使用内置的

    System.AccessToken
    来访问同一组织内的资源。

  2. not require a separate serviceConnection
    ✖️

    不,即使资源位于同一组织或同一项目内,也需要通用服务连接。请参阅 InvokeRESTAPI 任务的

    输入


对于您的情况,要使用

InvokeRESTAPI
任务调用 Azure DevOps REST API 来查询同一组织内的构建,您可以执行以下操作:

  1. 首先,进入“项目设置”>“服务连接”,设置一个新的通用服务连接,如下图所示。 “

    Server URL
    ”的值应该是API的HTTP URI的前缀。它至少应包含前缀“
    https://dev.azure.com
    ”。

  2. 然后进入管道配置

    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'

© www.soinside.com 2019 - 2024. All rights reserved.