我有一个 CD 发布管道,只要新的拉取请求 (PR) 构建成功,就会部署该管道。我想在我的发布标题中包含该 PR 的源分支名称以及 PR id。
我尝试了标题中的以下变量,但它们不起作用:
$(system.pullRequest.sourceBranch)
$(BUILD.PullRequest.SourceBranch)
$(BUILD.PullRequest.ID)
我只是不想使用 $(Build.SourceBranch) 或 $(Build.SourceBranchName) 因为它没有给我预期的价值。
我预期的发布标题: “PR 运行 - 个人/ak/随机构建,PRID 1234 - 01”
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'
}
将其添加为版本中的一个步骤。结果:
不要忘记为您的发布管道提供对令牌的访问权限:
正如你所说,
$(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 开发者社区上提出了功能请求:欢迎投票。