在 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 的文档。
我正在编写 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 的文档。