如何在 ADO 发布标题中包含源分支名称或拉取请求 ID?

问题描述 投票:0回答:3

我有一个 CD 发布管道,只要新的拉取请求 (PR) 构建成功,就会部署该管道。我想在我的发布标题中包含该 PR 的源分支名称以及 PR id。

我尝试了标题中的以下变量,但它们不起作用:

$(system.pullRequest.sourceBranch)

$(BUILD.PullRequest.SourceBranch)

$(BUILD.PullRequest.ID)

我只是不想使用 $(Build.SourceBranch) 或 $(Build.SourceBranchName) 因为它没有给我预期的价值。

我预期的发布标题: “PR 运行 - 个人/ak/随机构建,PRID 1234 - 01”

azure-devops pull-request azure-pipelines-release-pipeline
3个回答
1
投票

PR 变量在发布范围内不可用:如何管理新版本的名称?

但是,。您可以使用 BuildId 通过 Rest API 获取详细的构建信息并更新您的版本名称。

PowerShell 示例:

$user = ""
$token = $env:SYSTEM_ACCESSTOKEN

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$orgUrl = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
$teamProject = "$env:SYSTEM_TEAMPROJECT"
$currentBuildId = "$env:BUILD_BUILDID"

$restApiGetBuild = "$orgUrl/$teamProject/_apis/build/builds/$currentBuildId`?api-version=6.0"

function InvokeGetRequest ($GetUrl)
{   
    return Invoke-RestMethod -Uri $GetUrl -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
}

$resBuild = InvokeGetRequest $restApiGetBuild

if (-not [string]::IsNullOrEmpty($resBuild.triggerInfo.'pr.number'))
{
    Write-Host "##vso[release.updatereleasename]PR Run - PR ID" $resBuild.triggerInfo.'pr.number'
}

将其添加为版本中的一个步骤。结果:

不要忘记为您的发布管道提供对令牌的访问权限:


0
投票

正如你所说,

$(BUILD.PullRequest.SourceBranch)
不存在。对于拉取请求的变量,您必须使用根
System.PullRequest.

实际上(2024 年 4 月)构建管道支持这些预定义变量

Build.SourceBranch
:源分支的全名,例如“refs/heads/my-folder/my-feature-branch”。
Build.SourceBranchName
:源分支的名称,例如“my-feature-branch”。遗憾的是,这对于正常构建来说没问题,但对于 PR 触发的构建来说,该值变成了“合并”..

System.PullRequest.TargetBranch
:PR 的目标分支的全名,如“refs/heads/master”。
System.PullRequest.targetBranchName
:PR 的目标分支的名称,例如“master”。
System.PullRequest.SourceBranch
:PR 源分支的全名。与 Build.SourceBranchName 相同,但用于 PR。 我建议使用这个,但是您需要一些操作才能拥有简短方便的名称。 注意:这些仅用于公关。在正常的 CI 构建管道运行中,这些
System.PullRequest.
变量不存在。

另一点:当然最好的事情是有一个

System.PullRequest.SourceBranchName
变量,但遗憾的是目前还不存在。我最近在 MS 开发者社区上提出了功能请求:欢迎投票。


-2
投票

你就快到了。 您需要的变量是 $(Build.PullRequest.SourceBranch) 由于您的发布管道是由拉取请求触发的,因此它将可用。

但我必须警告您,Microsoft 并未记录此变量。

看看这张图片 Variable available at the release pipeline

© www.soinside.com 2019 - 2024. All rights reserved.