在VSTS Pull Request中获取真实的源分支名称

wer*_*zui 8 git azure-devops azure-pipelines

我们正在使用带有Git和Team System Build(以前的Build vNext)的Visual Studio Team Systems。当我们执行请求请求时,将触发一个新的构建,该构建将用于运行单元测试并部署到隔离的测试系统中。为了执行到隔离系统的部署,我需要在构建过程中获取真实的源分支名称。但是,Build.SourceBranchName变量始终为“合并”,

例如:

从源FOO到目标BAR的请求 Build.SourceBranch是“ refs / pull / 1 / merge”,因此Build.SourceBranchName是“ merge”。但是我需要以某种方式使“ FOO”运行我的Power Shell脚本来配置系统。

有没有办法在VSTS的Git Pull Request中获取真实的源分支名称?

Ond*_*dra 6

VSTS现在具有System.PullRequest.SourceBranchSystem.PullRequest.TargetBranch变量。那应该可以解决您的问题,而无需编写任何自定义脚本

构建变量


Edd*_*SFT 5

对此没有任何变量,但您可以创建一个 power-shell 脚本以通过Rest API获取它。

[String]$projecturi = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
[String]$sourcebranch = "$env:BUILD_SOURCEBRANCH"
[String]$repoid = "$env:BUILD_REPOSITORY_ID"

$username="alternativeusername"
$password="alternativepassword"

$basicAuth= ("{0}:{1}"-f $username,$password)
$basicAuth=[System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth=[System.Convert]::ToBase64String($basicAuth)
$headers= @{Authorization=("Basic {0}"-f $basicAuth)}

#get pull request ID via regex
$pullrequest = "refs/pull/+(?<pullnumber>\w+?)/merge+"
if($sourcebranch -match $pullrequest){        
        $pullrequestid = $Matches.pullnumber;
    }
else { write-host "Cannot find pull request ID" }

#get pull request information via API
$url= $projecturi + "_apis/git/repositories/" + $repoid + "/pullRequests/" + $pullrequestid + "?api-version=1.0-preview.1"

Write-Host $url

$getpullrequest = Invoke-RestMethod -Uri $url -headers $headers -Method Get

#get sourcebranch and targetbranch
$sourceref = $getpullrequest.sourceRefName
$targetref = $getpullrequest.targetRefName
Run Code Online (Sandbox Code Playgroud)