这有点棘手,但在Azure管道中,如果您具有“拉取”请求的构建验证策略,则构建管道将运行,并具有以下变量:
System.PullRequest.SourceBranch
The branch that is being reviewed in a pull request. For example: refs/heads/feature/branch.
System.PullRequest.TargetBranch
The branch that is the target of a pull request. For example: refs/heads/master.
但是,在“拉取请求”完成并且CI触发了目标分支(refs / head / master)上的管道构建后,就不再可能查看这些变量。
我有一个npm软件包,我希望在PR成功合并之后,根据PR分支是以 refs / feature / 还是<开始,自动发布新的次要版本或补丁版本。 em> refs / bugfix / 。
如何在目标分支的此CI构建中获取源PR分支的名称。 (不是PR构建验证政策)
答案 0 :(得分:1)
您可以使用rest api获取PR的源分支。
您可以添加脚本任务来调用Get Pull Requests Api,并指定searchCriteria
来过滤最新的Pull Request。请检查以下示例:
- powershell: |
$url = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/git/repositories/$(Build.Repository.ID)/pullrequests?searchCriteria.targetRefName=refs/heads/master&searchCriteria.status=completed&'$top=1&api-version=5.1"
$result = Invoke-RestMethod -Uri $url -Headers @{authorization = "Bearer $(System.AccessToken)"} -Method get
$branches = $result.value[0]
echo "##vso[task.setvariable variable=sourceBranch]$($branches.sourceRefName)"
以上脚本将获取最新的合并到Master分支的Pull请求,然后检索sourceRefName并将其设置为变量sourceBranch。这样您就可以在以下任务中引用变量$(sourceBranch)。
您可以用来获取sourceRefName的另一个API是Builds - Get。由于在PR构建之后立即触发了master分支上的CI构建。您可以在$(Build.BuildId)-1
的主分支CI生成中引用PR生成ID。例如
$buildid = $(Build.BuildId)-1
$url="$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$buildid?api-version=5.1"
$bresult = Invoke-RestMethod -Uri $prurl -Headers @{authorization = "Bearer $(System.AccessToken)"} -Method get
$para = $bresult.parameters | ConvertFrom-Json
echo "##vso[task.setvariable variable=sourceBranch]$($para.'system.pullRequest.sourceBranch')"