如何使用 Azure DevOps API 获取拉取请求中关联的工作项

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

我尝试使用 Azure DevOps API 获取 Pull 请求。我想包含关联的工作项或仅包含工作项 ID。

我可以使用此 URL 获取 PR。但答案不包含任何有关工作项目的信息。

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests?api-version=7.1-preview.1

您可以在下面看到的另一个 URL,我可以使用它获取每个 PR 的工作项。

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/workitems?api-version=7.1-preview.1

但是 PR 列表的数量可能很大。所以我觉得把第二个url分别调用是不合适的。

有没有更好的方法通过 PR 获取工作项目?

git api azure-devops pull-request azure-devops-rest-api
1个回答
0
投票

如果您想获取一个特定拉取请求及其关联的工作项,您可以使用rest api 拉取请求 - 获取拉取请求

includeWorkItemRefs=true

如果您想获得所有拉取请求和关联的工作项,您必须执行以下两个步骤:

  1. 通过 REST API 获取拉取请求 id 拉取请求 - 获取拉取请求
  2. 然后对每个拉取请求进行循环,调用拉取请求工作项 - 列表或上面的拉取请求 - 获取拉取请求其余 api 来获取关联的工作项。 PS 脚本示例:
# Define your organization, project, repository, and PAT
$organization = "your-organization"
$project = "your-project"
$repository = "your-repository"
$PAT = "your-PAT"

# Create the base64 encoded authorization header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$PAT)))

# Define the API URL for pull requests
$apiUrl = "https://dev.azure.com/$organization/$project/_apis/git/repositories/$repository/pullrequests?api-version=6.0"

# Call the API to get all pull requests
$response = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

# Loop through each pull request
foreach($pullRequest in $response.value) {
    # Get the pull request ID
    $pullRequestId = $pullRequest.pullRequestId

    # Define the API URL for work items associated with the pull request
    $workItemsApiUrl = "https://dev.azure.com/$organization/$project/_apis/git/repositories/$repository/pullrequests/$pullRequestId/workitems?api-version=6.0"

    # Call the API to get associated work items
    $workItemsResponse = Invoke-RestMethod -Uri $workItemsApiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

    # Print the pull request ID and associated work item IDs
    Write-Host "Pull Request ID: $pullRequestId"
    Write-Host "Associated Work Items:"
    foreach($workItem in $workItemsResponse.value) {
        Write-Host $workItem.id
    }
}

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