如何获得 Azure DevOps 管道中构建的代码审阅者?
How do I get the code reviewer(s) of a build in Azure DevOps pipeline?
给定构建 ID,如何在 azure DevOps 管道中获取代码审阅者姓名?
假设,构建脱离了主分支——开发人员在拉取请求中审查了代码后合并了他们的功能分支。这是政策,没有人直接将他们的更改提交给 master。这意味着,每个构建背后都有一个代码审查员。我如何获得它?
谢谢!
您可以使用下面Rest api获取PR审稿人。
1,首先用buildId在build rest api下面调用。在响应中,您将从构建的 sourceVersion 和存储库 ID 中获取提交 ID。
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
2、获取commit id和repository id后。您可以调用 commit rest api 从响应中的 评论 中获取关联的 PR id。
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?api-version=5.1
3、然后调用pull request reviewer rest api获取Reviewers
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers?api-version=5.1
以下是 powershell 中的示例脚本。请参阅 this link 以获取个人访问令牌
$buildId= " "
$burl =" https://dev.azure.com/OrgName/ProjName/_apis/build/builds/$($buildId)?api-version=5.1"
$PAT="personel access token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))
$buildInfo = Invoke-RestMethod -Uri $curl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
#get CommitId and repoId
$commitId = $buildInfo.sourceVersion
$repoId=$buildInfo.repository.id
#commit rest api
$curl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($repoId)/commits/$($commitId)?api-version=5.1"
$commitInfo = Invoke-RestMethod -Uri $curl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
#get PR id
$prId = $commitInfo.comment.split(" ")[2].TrimEnd(":")
$prurl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($repoId)/pullRequests/$($prId)/reviewers?api-version=5.1"
Invoke-RestMethod -Uri $prurl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
如果您可以在 UI 页面中使用给定的 buildId 从管道运行历史记录中找到构建。这会容易得多。您可以直接从标题中获取 PR id。见下图
您也可以点击上面截图中显示的commit id,查看commit的详细信息,在这里您将获得相关的PR。
这是我终于完成的工作。使用上面 Levi 的代码片段并修复一行以获取在各种情况下工作的拉取请求 ID。感谢 Levi's 的帮助!希望对大家有帮助。
$PAT="personel access token"
$base64EncodedPAT = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))
$basicAuth = @{Authorization = "Basic $base64EncodedPAT" }
$buildId= "..."
function GetCodeReviewers() {
#Get build info
$buildUrl = "https://dev.azure.com/OrgName/ProjName/_apis/build/builds/$($buildId)?api-version=5.1"
$buildInfo = Invoke-RestMethod -Method Get -Uri $buildUrl -Headers $basicAuth
# Get Commit Info
$commitUrl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($buildInfo.repository.id)/commits/$($buildInfo.sourceVersion)?api-version=5.1"
$commitInfo = Invoke-RestMethod -Uri $commitUrl -Method Get -Headers $basicAuth
#Get Code Reviewers
$comment = $commitInfo.comment
#$pullRequestId = $comment.split(" ")[2].TrimEnd(":") # it turns out, the 3rd item may not always be the PullRequestID so the next line may not work for all scenarios
#note that, a comment could come as follows:
# case 1: Merge PR 1234: some other text here including story or bug numbers
# case 2: Merge pull request 1234 some additional text goes here including story or bug numbers
# The following will pick the first number - which I assume will always be the PullRequestID
$pullRequestId = $null
$pullRequestId = $comment.Replace(':', '').Split(" ").Trim() | Where-Object {[int]::TryParse($_, $pullRequestId)} | Select-Object -First 1
$pullRequestUrl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($buildInfo.repository.id)/pullRequests/$($pullRequestId)/reviewers?api-version=5.1"
$reviewers = Invoke-RestMethod -Uri $pullRequestUrl -Method Get -Headers $basicAuth
return $reviewers.value
}
给定构建 ID,如何在 azure DevOps 管道中获取代码审阅者姓名? 假设,构建脱离了主分支——开发人员在拉取请求中审查了代码后合并了他们的功能分支。这是政策,没有人直接将他们的更改提交给 master。这意味着,每个构建背后都有一个代码审查员。我如何获得它?
谢谢!
您可以使用下面Rest api获取PR审稿人。
1,首先用buildId在build rest api下面调用。在响应中,您将从构建的 sourceVersion 和存储库 ID 中获取提交 ID。
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
2、获取commit id和repository id后。您可以调用 commit rest api 从响应中的 评论 中获取关联的 PR id。
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?api-version=5.1
3、然后调用pull request reviewer rest api获取Reviewers
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers?api-version=5.1
以下是 powershell 中的示例脚本。请参阅 this link 以获取个人访问令牌
$buildId= " "
$burl =" https://dev.azure.com/OrgName/ProjName/_apis/build/builds/$($buildId)?api-version=5.1"
$PAT="personel access token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))
$buildInfo = Invoke-RestMethod -Uri $curl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
#get CommitId and repoId
$commitId = $buildInfo.sourceVersion
$repoId=$buildInfo.repository.id
#commit rest api
$curl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($repoId)/commits/$($commitId)?api-version=5.1"
$commitInfo = Invoke-RestMethod -Uri $curl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
#get PR id
$prId = $commitInfo.comment.split(" ")[2].TrimEnd(":")
$prurl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($repoId)/pullRequests/$($prId)/reviewers?api-version=5.1"
Invoke-RestMethod -Uri $prurl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo1)} -Method get -ContentType "application/json"
如果您可以在 UI 页面中使用给定的 buildId 从管道运行历史记录中找到构建。这会容易得多。您可以直接从标题中获取 PR id。见下图
您也可以点击上面截图中显示的commit id,查看commit的详细信息,在这里您将获得相关的PR。
这是我终于完成的工作。使用上面 Levi 的代码片段并修复一行以获取在各种情况下工作的拉取请求 ID。感谢 Levi's 的帮助!希望对大家有帮助。
$PAT="personel access token"
$base64EncodedPAT = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PAT)"))
$basicAuth = @{Authorization = "Basic $base64EncodedPAT" }
$buildId= "..."
function GetCodeReviewers() {
#Get build info
$buildUrl = "https://dev.azure.com/OrgName/ProjName/_apis/build/builds/$($buildId)?api-version=5.1"
$buildInfo = Invoke-RestMethod -Method Get -Uri $buildUrl -Headers $basicAuth
# Get Commit Info
$commitUrl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($buildInfo.repository.id)/commits/$($buildInfo.sourceVersion)?api-version=5.1"
$commitInfo = Invoke-RestMethod -Uri $commitUrl -Method Get -Headers $basicAuth
#Get Code Reviewers
$comment = $commitInfo.comment
#$pullRequestId = $comment.split(" ")[2].TrimEnd(":") # it turns out, the 3rd item may not always be the PullRequestID so the next line may not work for all scenarios
#note that, a comment could come as follows:
# case 1: Merge PR 1234: some other text here including story or bug numbers
# case 2: Merge pull request 1234 some additional text goes here including story or bug numbers
# The following will pick the first number - which I assume will always be the PullRequestID
$pullRequestId = $null
$pullRequestId = $comment.Replace(':', '').Split(" ").Trim() | Where-Object {[int]::TryParse($_, $pullRequestId)} | Select-Object -First 1
$pullRequestUrl = "https://dev.azure.com/OrgName/ProjName/_apis/git/repositories/$($buildInfo.repository.id)/pullRequests/$($pullRequestId)/reviewers?api-version=5.1"
$reviewers = Invoke-RestMethod -Uri $pullRequestUrl -Method Get -Headers $basicAuth
return $reviewers.value
}