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')"
这解释起来有点棘手,但在 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')"