Azure管道:CI Build在合并请求请求源分支名称后运行?

时间:2020-03-03 09:53:07

标签: git azure continuous-integration branch azure-pipelines

这有点棘手,但在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构建验证政策)

1 个答案:

答案 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')"