在 Azure yaml 管道中获取另一个任务中任务的失败消息

Get the failure message of a task in another task in Azure yaml pipelines

我正在编写 YAML 管道,并希望将特定任务中的问题报告给 application insights。我正在尝试做这样的事情:

- task: Task1
  displayName: doSomething1

- task: Task2
  displayName: doSomething2

- task: Task3
  displayName: log failures in task1 and task2

基本上,Task1 和 Task2 会做一些事情,如果其中任何一个任务失败,我希望 task3 开始执行。 Task3 会将数据发送到 application insights。有什么方法可以知道哪个任务失败并在任务 3 中获取该任务的失败日志,以便将其发送到 application insights?

有没有更好的替代方法来实现这一目标?

Is there any better alternative way to achieve this?

您可以使用 task to 运行 Rest API: Timeline - Get 获取错误消息和失败的任务。

这是 PowerShell 示例:

$token = "PAT"

$url="https://dev.azure.com/{ORG}/{project}/_apis/build/builds/$(build.buildid)/timeline?api-version=6.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))



$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json

$errors = $response.records.Where({ $_.result -eq "failed“ })



$errors.ForEach({
   
   $_.name

   $_.issues.ForEach({ $_.message })
})

结果:

同时,您需要为任务设置条件。

例如:

- task: Task1
  displayName: doSomething1

- task: Task2
  displayName: doSomething2

- task: Task3
  displayName: log failures in task1 and task2
  condition: failed()

这是关于 Condition 的文档。