Azure Pipelines:合并拉取请求源分支名称后 CI 构建 运行?

Azure Pipelines: CI Build running after merging pull request source branchname?

这解释起来有点棘手,但在 Azure Pipelines 中,如果您有针对拉取请求的构建验证策略,构建管道将 运行 具有以下变量:

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. 

但是在 Pull Request 完成并且 CI 在目标分支 (refs/head/master) 上触发管道构建后,将无法再查看这些变量。

我有一个 npm 包,我希望在成功合并 PR 后,根据 PR 分支是否以 refs/feature/ 开头自动发布新的次要版本或补丁版本refs/bugfix/

如何在目标分支上的 CI 构建中获取源 PR 分支的名称。 (不是 PR 构建验证策略)

您可以使用 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 request,然后获取sourceRefName并将其设置为变量sourceBranch。以便您可以在后续任务中引用变量 $(sourceBranch)。

可用于获取 sourceRefName 的另一个 api 是 Builds - Get。由于 master 分支上的 CI 构建是在 PR 构建之后立即触发的。可以参考master分支CI build by $(Build.BuildId)-1中的PR build 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')"