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

时间:2020-07-16 10:43:33

标签: azure-devops azure-pipelines

我的问题基本上是标题。我找不到this page并在网上搜索到的此类信息。

我的情况如下:每当我创建要掌握的PR时,我都会添加带有一些信息的标签,例如此处显示的lib版本:

enter image description here

然后,在构建过程中,我生成发行说明,并希望在任务中访问该PR标签,就像在这里使用$(Build.BuildId)一样:

enter image description here

我该怎么做? $(PullRequest.Tag)之类的东西 谢谢!

2 个答案:

答案 0 :(得分:2)

我该怎么做?像$(PullRequest.Tag)这样的东西!

Pull Request标签没有没有预定义变量。 (我在CMD任务中使用printenv命令来确认!)

这是我的解决方法:

使用Powershell task调用this 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)"

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

注释:

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

enter image description here

2。由于它是output variable,因此我们应使用格式$(referenceName.variablename)

enter image description here

enter image description here

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

3。由于您的方案处于PR触发的管道运行中,因此实际上Powershell任务应该仅在PR触发当前管道时运行,而不是手动运行/ CI。

在PS任务的控制选项中使用and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))。请参见conditionsBuild.Reason变量。

更新

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

enter image description here

$(PS.PullRequestTag)的值为:

enter image description here

答案 1 :(得分:1)

我怀疑是否有一个用于拉取请求标签的预定义变量,但是您可以使用REST API达到目标。例如,您可以拥有一个构建任务(例如PowerShell脚本),该任务可以: