Поднять комментарий в Azure DevOps PR - PullRequest
2 голосов
/ 04 февраля 2020

У меня есть пользовательский шаг сборки, который не выполняется при определенных условиях во время моей сборки запроса на извлечение, в пределах Azure DevOps.

Я хотел бы расширить его, подняв комментарий PR, похожий на этот вид вещь в Github: https://developer.github.com/v3/issues/comments/#create -a-comment

У меня нет примеров кода для добавления здесь, так как я не смог найти полезных примеров для создания apon. Я использую PowerShell для своего пользовательского шага сборки - как мне этого добиться, выполняя PR-сборку моей ветки?

Заранее спасибо за любые указатели, ребята!

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

Я могу помочь с примером. Есть много смысла в публикации пользовательских сообщений \ статуса в PR от ваших конвейеров.

Перво-наперво, убедитесь, что у вашей службы сборки есть разрешения на внесение запросов на получение запросов в вашем хранилище.

permissions

Затем вы хотите добавить условный шаг PowerShell. Этот просто основан на том, что это PR-компоновка, но вы можете добавить зависание в зависимости от сбоя на предыдущем шаге, в зависимости от вашего рабочего процесса.

- task: PowerShell@2
  condition: eq(variables['Build.Reason'], 'PullRequest')
  displayName: Post Message to PR
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)  
  inputs:
      targetType: filePath
      filePath: PostToPR.ps1

Итак, основной рабочий процесс c:

  • Построить сообщение об уценке
  • Построить JSON Тело
  • Опубликовать сообщение на PR

PostToPR.ps1

#Going to create the comment in an Active state, assuming it needs to be resolved
#See https://docs.microsoft.com/en-us/dotnet/api/microsoft.teamfoundation.sourcecontrol.webapi.commentthreadstatus?view=azure-devops-dotnet
$StatusCode = 1 

$Stuff = $env:Build_Repository_Name
$Things = "Other things you might want in the message"

#Build Up a Markdown Message to 
$Markdown = @"
## Markdown Message here
|Column0 |Column1|
|--------|---------|
|$Stuff|$Things|  
"@

#Build the JSON body up
$body = @"
{
    "comments": [
      {
        "parentCommentId": 0,
        "content": "$Markdown",
        "commentType": 1
      }
    ],
    "status": $StatusCode 
  }
"@

Write-Debug $Body
#Post the message to the Pull Request
#https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20request%20threads?view=azure-devops-rest-5.1
try {
    $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:Build_Repository_Name)/pullRequests/$($env:System_PullRequest_PullRequestId)/threads?api-version=5.1"
    Write-Host "URL: $url"
    $response = Invoke-RestMethod -Uri $url -Method POST -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Body $Body -ContentType application/json
  if ($response -ne $Null) {
    Write-Host "*******************Bingo*********************************"
  }
}
catch {
  Write-Error $_
  Write-Error $_.Exception.Message
}

И в итоге вы получите хорошую таблицу уценок с пользовательской информацией о состоянии вашего PR!

enter image description here

0 голосов
/ 04 февраля 2020

Если вы имеете в виду создание PR-комментария в конвейере сборки, то вы можете добавить в свой конвейер задачу PowerShell и запустить скрипт для вызова REST API ( Комментарии потока запроса на извлечение - Создать ).

Ниже скрипт PowerShell для вашей справки:

Param(
   [string]$baseurl = "https://dev.azure.com/{organization}",
   [string]$projectName = "0508-t",
   [string]$repositoryId = "62c8ce54-a7bb-4e08-8ed7-40b27831bd8b",
   [string]$pullRequestId = "35",
   [string]$threadId = "229",
   [string]$user = "",
   [string]$token = "PAT"  
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
write-host $WorkitemType

#Create Jason body

function CreateJsonBody
{

    $value = @"
{
  "content": "Test Comment 0204",
  "parentCommentId": 1,
  "commentType": 1
}
"@

 return $value
}

$json = CreateJsonBody

$uri = "$baseurl/$projectName/_apis/git/repositories/$repositoryId/pullRequests/$pullRequestId/threads/$threadId/comments?api-version=5.1"
Write-Host $uri
$result = Invoke-RestMethod -Uri $uri -Method Post -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
...