代码之家  ›  专栏  ›  技术社区  ›  Koref Koref

如何获取Azure DevOps管道中构建的代码审阅者?

  •  0
  • Koref Koref  · 技术社区  · 5 年前

    给定一个构建id,我如何在azure DevOps管道中获取代码审阅者的姓名? 假设构建是从主分支开始的,开发人员在拉取请求中审查代码后合并他们的功能分支。这是政策,没有人直接将他们的更改提交给master。这意味着,每个构建背后都有一个代码审查员。我该怎么做?

    谢谢!

    0 回复  |  直到 5 年前
        1
  •  0
  •   Levi Lu-MSFT    5 年前

    您可以在下面使用 Rest api 以获得公关评论员。

    1、第一次呼叫下面的b uild rest api 与buildId。在响应中,您将从构建中获取提交id 源版本 以及存储库id。

    GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
    

    2、获取提交id和存储库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 以获得审稿人。

    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。见下图。

    enter image description here

    您还可以单击上面屏幕截图上显示的提交id,查看提交的详细信息,在那里您将获得相关的PR。

    enter image description here

        2
  •  0
  •   Koref Koref    5 年前

    这是我终于开始工作的东西。取了上面Levi的代码片段,只修复了一行代码,使pull请求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
    }
    
    推荐文章