是否可以读取管道任务上的 PR 标签?

ees*_*ein 10 azure-devops azure-pipelines

我的问题基本上是标题。我无法在阅读此页面并搜索网络时找到此类信息。

我的场景如下:每当我创建要掌握的 PR 时,我都会添加一个包含一些信息的标签,例如此处看到的 lib 版本:

在此输入图像描述

然后,在构建过程中,我生成发行说明,并希望在任务中访问该 PR 标签,就像我在$(Build.BuildId)此处所做的那样:

在此输入图像描述

我怎样才能做到这一点?诸如“谢谢”之类的东西$(PullRequest.Tag)

Lan*_*SFT 12

我怎样才能做到这一点?类似于 $(PullRequest.Tag) 谢谢!

拉取请求标签没有预定义变量(我printenv在 CMD 任务中使用命令来确认这一点!)

这是我的解决方法:

使用Powershell任务调用此rest api,响应将包含特定PR的标签

$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_NAME)/pullRequests/$($env:SYSTEM_PULLREQUEST_PULLREQUESTID)/labels?api-version=5.1-preview.1"
$response = Invoke-RestMethod -Uri $url -Method Get -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}

Write-Host "##vso[task.setvariable variable=PullRequestTag;isOutput=true]$($response.value.name)"
Run Code Online (Sandbox Code Playgroud)

然后将变量$response.value.name(来自rest api响应,名称代表标签名称)传递给输出变量PullRequestTag(自定义变量),以便后续任务可以访问返回的标签名称。

笔记:

1.确保包含Powershell任务的作业允许脚本访问OAuth令牌,因为我的脚本使用OAuth令牌而不是PAT来调用rest api。(点击代理作业名称=>其他选项)

在此输入图像描述

2.既然是输出变量,就应该使用format $(referenceName.variablename)

在此输入图像描述

在此输入图像描述

之后,我们可以$(PS.PullRequestTag)在接下来的任务中使用来访问标签名称。

3.由于您的场景是在 PR 触发的管道运行中,所以实际上 Powershell 任务应该仅在当前管道由 PR 触发时运行,而不是手动运行/CI。

用于and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))PS 任务的控制选项。请参阅条件Build.Reason变量。

更新:

如果我在创建 PR 时添加了几个标签:

在此输入图像描述

$(PS.PullRequestTag)值将是:

在此输入图像描述