我希望能够获得PR消息并将其存储为Azure Devops中的变量,因此我可以将标题更改为具有** SKIP TEST **
并在管道中进行扫描,而不是通过变量UI手动。
我想我只需要执行某种REST API调用,因为我已经有了PR ID和其他标识信息。然后使用读取输出并将值存储到变量的工具。
答案 0 :(得分:1)
我想我只需要执行某种REST API调用,因为我已经有了PR ID和其他标识信息。
既然您已经有了PR ID,我建议使用Pull Requests - Get Pull Request By Id。
使用此api:
GET https://dev.azure.com/{organization}/{project}/_apis/git/pullrequests/{pullRequestId}?api-version=5.1
您可以在文档response sample中看到title
。
...
"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结果:
答案 1 :(得分:0)
要在YAML管道(而不是Classic)上执行此操作
steps:
- bash: |
PR_TITLE="$(curl --silent -u azdo:$SYSTEM_ACCESSTOKEN \
$(System.CollectionUri)_apis/git/repositories/$(Build.Repository.ID)/pullRequests/$(System.PullRequest.PullRequestId)?api-version=5.1 \
| jq -r .title)"
echo "##vso[task.setvariable variable=Pr.Title]$PR_TITLE"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Extract pull request title
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- bash: |
echo "running test"
displayName: Run test
condition: and(succeeded(), not(startsWith(variables['Pr.Title'], '**SKIPTEST**')))
下面是一个示例,其中所有内容都在一行中,但我更喜欢上面的示例,因为新手更容易阅读
steps:
- bash: |
echo "##vso[task.setvariable variable=Pr.Title]"$(curl --silent -u azdo:$SYSTEM_ACCESSTOKEN $(System.CollectionUri)_apis/git/repositories/$(Build.Repository.ID)/pullRequests/$(System.PullRequest.PullRequestId)?api-version=5.1 | jq -r .title)
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Extract pull request title
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- bash: |
echo "running test"
displayName: Run test
condition: and(succeeded(), not(startsWith(variables['Pr.Title'], '**SKIPTEST**')))
此外,如果您更喜欢“标签”而不是更改标题(我自己更喜欢标题,因为它在任何地方都清晰可见),则可以使用以下脚本提取标签
steps:
- bash: |
LABELS=$(curl --silent -u azdo:$SYSTEM_ACCESSTOKEN $(System.CollectionUri)_apis/git/repositories/$(Build.Repository.ID)/pullRequests/$(System.PullRequest.PullRequestId)/labels?api-version=5.1-preview.1 | jq .value[].name)
echo "##vso[task.setvariable variable=Pr.Labels]$LABELS"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Get Pull Request Labels
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- bash: |
echo "running test"
displayName: Run test
condition: and(succeeded(), not(contains(variables['Pr.Labels'], '"skip-test"')))
请注意,我没有在JQ上使用-r
来引用值。这样可以更明确地检查字符串,而不是匹配可能包含文本作为子字符串的标签。