温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Easily catch error from maven install task in build pipeline in Azure Devops?
azure-devops azure-pipelines continuous-integration maven pipeline

其他 - 是否可以从Azure Devops的生成管道中的Maven安装任务中轻松捕获错误?

发布于 2020-04-04 00:23:37

在Azure Devops中,当您的Maven生成任务失败时,它将在生成摘要中显示如下错误:

Maven构建错误

现在,如果您单击并向上滚动,您将能够在反应堆摘要旁边找到错误。这很容易在家里用鼠标和大屏幕完成,但是对于我们一些在火车上或咖啡馆里的开发人员来说,发现错误可能是相当大的努力。我希望能够使错误更容易找到。下面是我考虑过但不确定如何实现的一些建议。您还有其他好主意吗?

  • 减少Maven日志的输出-我已经尝试过-q标志,但是它似乎不适用于该任务?
  • 以某种方式使用rest api查找错误,然后使用webhook将其发送到松弛通道-不确定如何使用rest api查找日志或错误

查看更多

提问者
itadvicehelpsdf
被浏览
107
Eric Smith 2020-02-03 11:58

因此,我可以帮助您解决如何从构建日志中捕获错误并将其发送到Slack。

假设我们将在生成错误之后将此任务作为下一个任务运行。

  • 我们可以通过API获取构建日志确保添加,system_access token 以便您可以进行身份​​验证
  • 一旦我们拥有所有日志,就从响应中获取网址以下载最新的日志
  • 下载最新日志
  • 解析并找到[[error]]线条
  • 将消息编组为松弛\或使用该消息执行其他任何操作

YAML

- pwsh: |
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $env:System_AccessToken)))
    $uriLogs = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds/$env:BUILD_BUILDID/logs?api-version=5.1"
    $response = Invoke-RestMethod -Uri $uriLogs -Method 'GET' -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
    $logUrl =$response.value[-1].url
    $webContent = Invoke-WebRequest -Uri $logUrl -Method 'GET' -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
    $ErrorMessage = $webContent.Content.tostring() -split "[`r`n]" | select-string "[[Error]]"
    Write-Output "Error lines found " $ErrorMessage

    $postSlackMessage = @{token=$env:SLACK_TOKEN;channel="@user,#channel-name";text=$ErrorMessage}
    Invoke-RestMethod -Uri https://slack.com/api/chat.postMessage -Body $postSlackMessage
  env:
    system_accesstoken: $(System.AccessToken)
  condition: failed()

其他选择:

  • 解析日志,查找错误,然后直接在该行号处发送指向故障的链接。有一种众所周知的直接链接到每一行的格式。
  • 发送直接链接以仅下载日志的错误部分。请参阅startLineendLine 参数在这里