Как получить рецензентов кода сборки в конвейере Azure DevOps?
Как получить имя рецензента (ов) кода в конвейере Azure DevOps с учетом идентификатора сборки? Предположим, сборка была произведена вне основной ветки - разработчики объединяют свои функциональные ветки после того, как код был рассмотрен в запросе на перенос. Это политика, и никто напрямую не передает свои изменения хозяину. Это означает, что за каждой сборкой стоит рецензент кода. Как мне это получить?
Благодарность!
2 ответа
Вы можете использовать нижеприведенный Rest api, чтобы получить PR-обозревателей.
1, сначала вызовите ниже API -интерфейс сборки с идентификатором buildId. И в ответ вы получите идентификатор фиксации из sourceVersion сборки и идентификатор репозитория.
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
2. После того, как вы получите идентификатор фиксации и идентификатор репозитория. Вы можете вызвать commit rest api, чтобы получить связанный идентификатор PR из комментариев в ответе.
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?api-version=5.1
3, затем вызовите рецензента запроса на вытягивание rest api, чтобы получить рецензентов.
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers?api-version=5.1
Ниже приведены примеры сценариев в PowerShell. Перейдите по этой ссылке, чтобы получить токен личного доступа
$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"
Если вы можете найти сборку из истории запусков конвейера на странице пользовательского интерфейса, укажите buildId. Будет намного проще. Вы можете получить PR-идентификатор напрямую из заголовка. См. Рис. Ниже.
Вы также можете щелкнуть идентификатор фиксации, показанный на скриншоте выше, чтобы увидеть детали фиксации, где вы получите связанный PR.
Вот что у меня наконец-то получилось. Взял приведенный выше фрагмент кода Леви и просто исправил строку, чтобы получить идентификатор запроса на вытягивание, работающий в различных сценариях. Престижность 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
}