Легко отловить ошибку из задачи установки maven в конвейере сборки в Azure Devops? - PullRequest
2 голосов
/ 31 января 2020

В Azure Devops, если ваша задача сборки Maven не выполнена, будет отображаться ошибка, подобная приведенной ниже в сводке сборки:

Ошибка сборки Maven

Теперь, если Вы нажмете и прокрутите вверх, вы сможете найти ошибку рядом со сводкой реактора. Это достаточно легко сделать дома с помощью мыши и большого экрана, но для некоторых наших разработчиков в поездах или в кафе им может быть довольно сложно найти ошибку. Я хочу, чтобы можно было легче найти ошибку. Ниже приведены некоторые предложения, о которых я подумал, но не уверен, как их реализовать. У вас есть другие хорошие идеи?

  • Уменьшить вывод журналов maven - я пробовал флаг -q, но, похоже, он не подходит для этой задачи?
  • Использование каким-то образом оставьте api, чтобы найти ошибку, а затем отправьте ее на слабый канал с помощью webhook - Не знаю, как найти журнал или ошибку с оставшимся API, хотя

1 Ответ

1 голос
/ 03 февраля 2020

Так что я могу помочь с тем, как вы можете извлечь ошибку из журналов сборки и отправить ее в Slack.

Предполагается, что мы выполним эту задачу как следующую задачу после ошибки сборки.

  • Мы можем получить журналы сборки через API . Обязательно добавьте system_access token , чтобы вы могли выполнить аутентификацию .
  • Как только у нас будут все журналы, возьмите URL-адрес из ответа, чтобы загрузить последний журнал
  • Загрузить последний журнал
  • Разобрать его и найти [[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()

Другие альтернативы:

  • анализирует журнал, находит ошибку, а затем отправляет ссылку на сбой непосредственно по этому номеру строки. Существует хорошо известный формат для прямых ссылок на каждую строку.
  • отправьте прямую ссылку, чтобы загрузить только часть ошибки журнала. См. startLine и endLine параметры здесь .
...