生成失败时如何在Azure DevOps PR中创建注释? [英] How to create a comment in Azure DevOps PR in case of build failure?

查看:186
本文介绍了生成失败时如何在Azure DevOps PR中创建注释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自定义生成步骤,该步骤在某些条件下在Azure DevOps中的拉取请求"生成过程中会失败.

I have a custom build step that fails under certain conditions during my Pull Request build, within Azure DevOps.

我想通过提出PR评论来进一步扩展它,类似于GitHub中的这种情况: https://developer.github.com/v3/issues/comments/#create-a-comment

I would like to extend it further by raising a PR comment, similar to this sort of thing in GitHub: https://developer.github.com/v3/issues/comments/#create-a-comment

我没有可在此处添加代码示例,因为找不到可用于构建的有用示例.我在自定义构建步骤中使用PowerShell-在运行分支的PR构建时如何实现?

I don't have code samples to add here as I could not find useful examples to build upon. I use PowerShell for my custom build step - how do I achieve this when running a PR build of my branch?

推荐答案

我可以举一个例子.将自定义消息\状态从管道发布到PR有很多价值.

I can help with an example. There is a bunch of value in posting custom messages\status to PRs from your pipelines.

首先,请确保您的构建服务具有权限以协助存储库中的拉取请求.

First things first, make sure your build service has permissions to contribute to pull requests in your repository.

然后,您想添加一个条件PowerShell步骤.这只是基于它的PR构建,但是您可能要根据工作流在上一步中添加一个基于失败的条件.

Then you want to add a conditional PowerShell step. This one is just based on it being a PR build, but you might want to add a depends on failure for the previous step, based on your workflow.

- 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

所以基本的工作流程是:

So the basic workflow is:

  • 构建降价消息
  • 构建JSON正文
  • 将消息发布到PR
#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
}

最后,您会得到一个漂亮的Markdown表,其中包含PR中的自定义状态信息!

And you end up with a nice markdown table with custom status information in your PR!

这篇关于生成失败时如何在Azure DevOps PR中创建注释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆