azure-devops - 是否可以读取管道任务的 PR 标签?
问题描述
我的问题基本上是标题。我在阅读此页面和搜索网络时找不到此类信息。
我的场景如下:每当我创建一个 PR 到 master 时,我都会添加一个带有一些信息的标签,比如这里看到的 lib 版本:
然后,在构建过程中,我生成发行说明,并希望在任务中访问该 PR 标签,就像我在$(Build.BuildId)
这里所做的那样:
我怎样才能做到这一点?像$(PullRequest.Tag)
谢谢!
解决方案
我怎样才能做到这一点?$(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)"
然后将变量$response.value.name
(来自rest api响应,名称代表标签名称)传递给输出变量PullRequestTag(自定义变量),以便下一个任务可以访问返回的标签名称。
笔记:
1.确保包含Powershell任务的作业允许脚本访问OAuth令牌,因为我的脚本使用OAuth令牌而不是PAT来调用rest api。(单击代理作业名称=>其他选项)
2.既然是输出变量,我们应该使用格式$(referenceName.variablename)
。
之后,我们可以$(PS.PullRequestTag)
在下一个任务中使用来访问标签名称。
3.由于您的场景是在由 PR 触发的管道运行中,所以实际上 Powershell 任务应该只在当前管道由 PR 触发而不是手动运行/CI 时运行。
and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
在 PS 任务的控制选项中使用。请参阅条件和Build.Reason变量。
更新:
如果我在创建 PR 时添加了几个标签:
的$(PS.PullRequestTag)
值将是:
推荐阅读
- django - Django Cycle 包含模板标签
- python - Google Colab 中 Python 的多处理问题
- android - 没有导航道具的 React Navigation 在发布模式下不起作用(Android 签名应用程序)
- jquery - 将 html 元素设置为 null 或空格会导致字段位移
- r - 冲积地块边距
- react-native - 如何在本机反应中制作路线?
- python - 明确地说,如何让 s3fs 在 AWS 中打开 gz 文件?胶水/S3
- excel - 将带有单元格锚定图像的电子表格导入 SQLite 数据库
- apache-zookeeper - 如何实现自定义执行器端点来检查动物园管理员的健康状况?
- batch-file - 批处理文件:以缩进顺序列出目录中的所有文件