Azure devops 如何获取PR标题并将其存储在变量中

Azure devops 如何获取PR标题并将其存储在变量中,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我希望能够获取PR消息并将其作为变量存储在Azure Devops中,以便我可以将标题更改为具有**跳过测试**,并在管道中扫描该消息,而不是手动通过变量UI 我想我只需要执行某种RESTAPI调用,因为我已经有了PR ID和其他标识信息。然后使用读取输出并将值存储到变量的工具 我想我只需要执行某种RESTAPI调用,因为我已经有了PR ID和其他标识信息 既然你已经有了公关身份证,我建议 使用此api: GEThttps://dev.azure.com/{organization}/{proj

我希望能够获取PR消息并将其作为变量存储在Azure Devops中,以便我可以将标题更改为具有
**跳过测试**
,并在管道中扫描该消息,而不是手动通过变量UI

我想我只需要执行某种RESTAPI调用,因为我已经有了PR ID和其他标识信息。然后使用读取输出并将值存储到变量的工具

我想我只需要执行某种RESTAPI调用,因为我已经有了PR ID和其他标识信息

既然你已经有了公关身份证,我建议

使用此api:

GEThttps://dev.azure.com/{organization}/{project}/_-api/git/pullrequests/{pullRequestId}?api版本=5.1

正如您在文档中看到的,有
标题

  ...
  "creationDate": "2016-11-01T16:30:31.6655471Z",
  "title": "A new feature",
  "description": "Adding a new feature",
  ...
将其存储在变量中

至于如何将其存储在变量中,我建议您可以创建一个变量,然后更新它

请参阅下面的演示使用powershell任务调用Rest Api并更新变量值,然后在下一个cmd任务中使用它:

变量:

Powershell任务:

Powershell脚本:

$personalToken="******************************"
$token=[System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))
$header=@{authorization="Basic $token"}
$projectUrl ="https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{PRid}?api-version=5.1"
$content=Invoke-RestMethod -Uri $projectUrl -Method GET -contentType "application/json" -Headers $header
Write-Host "##vso[task.setvariable variable=myTitle;]$content"
CMD任务:

CMD结果:


在YAML管道上执行此操作(而非经典)

步骤:
-狂欢节:|
PR_TITLE=“$(curl--silent-u azdo:$SYSTEM_ACCESSTOKEN\
$(System.CollectionUri)\u api/git/repositories/$(Build.Repository.ID)/pullRequests/$(System.PullRequest.PullRequestId)?api版本=5.1\
|jq-r.标题)
echo“##vso[task.setvariable=Pr.Title]$Pr#u Title”
环境:
SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)
displayName:提取请求标题
条件:and(successed(),eq(变量['Build.Reason'],'PullRequest'))
-狂欢节:|
回声“运行测试”
displayName:运行测试
条件:and(succeed(),not(startsWith(变量['Pr.Title'],'**SKIPTEST**'))
这里有一个例子,所有内容都在一行中,但我更喜欢上面的一行,因为它更容易让新手阅读

步骤:
-狂欢节:|
echo“##vso[task.setvariable=Pr.Title]”$(curl--silent-u azdo:$SYSTEM_ACCESSTOKEN$(SYSTEM.CollectionUri)_api/git/repositories/$(Build.Repository.ID)/pullRequests/$(SYSTEM.PullRequest.PullRequestId)?api版本=5.1 | jq-r.Title)
环境:
SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)
displayName:提取请求标题
条件:and(successed(),eq(变量['Build.Reason'],'PullRequest'))
-狂欢节:|
回声“运行测试”
displayName:运行测试
条件:and(succeed(),not(startsWith(变量['Pr.Title'],'**SKIPTEST**'))
标签 此外,如果您更喜欢“标签”而不是更改标题(我更喜欢标题,因为它在任何地方都清晰可见),可以使用以下脚本提取标签

步骤:
-狂欢节:|
LABELS=$(curl--silent-u azdo:$SYSTEM_ACCESSTOKEN$(SYSTEM.CollectionUri)_api/git/repositories/$(Build.Repository.ID)/pullRequests/$(SYSTEM.PullRequest.PullRequestId)/LABELS?api版本=5.1-preview.1 | jq.value[].name)
echo“##vso[task.setvariable=Pr.Labels]$Labels”
环境:
SYSTEM_ACCESSTOKEN:$(SYSTEM.ACCESSTOKEN)
displayName:获取拉取请求标签
条件:and(successed(),eq(变量['Build.Reason'],'PullRequest'))
-狂欢节:|
回声“运行测试”
displayName:运行测试
条件:and(succeed(),not(包含(变量['Pr.Labels'],'skip test'))

注意,我没有在JQ上使用
-r
,因此引用了这些值。这允许更明确地检查字符串,而不是匹配可能包含作为子字符串的文本的标签。

什么是PR消息?您好,我在下面发布了一个答案,这是您想要的吗?您是否可以按照预期的步骤获取PR消息?如果是这样,你可以。或者,如果您对解决方案有任何问题,请随时询问。