我的问题基本上是标题。我找不到this page并在网上搜索到的此类信息。
我的情况如下:每当我创建要掌握的PR时,我都会添加带有一些信息的标签,例如此处显示的lib版本:
然后,在构建过程中,我生成发行说明,并希望在任务中访问该PR标签,就像在这里使用$(Build.BuildId)
一样:
我该怎么做? $(PullRequest.Tag)
之类的东西
谢谢!
答案 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。 (单击代理作业名称=>其他选项)
2。由于它是output variable,因此我们应使用格式$(referenceName.variablename)
。
之后,我们可以在下一个任务中使用$(PS.PullRequestTag)
来访问标签名称。
3。由于您的方案处于PR触发的管道运行中,因此实际上Powershell任务应该仅在PR触发当前管道时运行,而不是手动运行/ CI。
在PS任务的控制选项中使用and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
。请参见conditions和Build.Reason变量。
更新:
如果在创建PR时添加了几个标签:
$(PS.PullRequestTag)
的值为:
答案 1 :(得分:1)
我怀疑是否有一个用于拉取请求标签的预定义变量,但是您可以使用REST API达到目标。例如,您可以拥有一个构建任务(例如PowerShell脚本),该任务可以: