Как сделать так, чтобы azure devops build потерпел неудачу при возникновении проблем с R linting - PullRequest
1 голос
/ 23 января 2020

Я использую библиотеку lintr в R, чтобы найти проблемы с linting в коде. Я поместил их в xml формат, подобный следующему:

<lintsuites>
  <lintissue filename="/home/.../blah.R" line_number="36" column_number="1" type="style" message="Trailing blank lines are superfluous."/>
  <lintissue filename="/home/.../blahblah.R" line_number="1" column_number="8" type="style" message="Only use double-quotes."/>
</lintsuites>

Теперь я хотел бы завершить сборку Azure devops при возникновении подобных проблем.

Я смог получить мои тесты в формате JUnit, например:

  <testsuite name="MB Unit Tests" timestamp="2020-01-22 22:34:07" hostname="0000" tests="29" skipped="0" failures="0" errors="0" time="0.05">
    <testcase time="0.01" classname="1_Unit_Tests" name="1_calculates_correctly"/>
    <testcase time="0.01" classname="1_Unit_Tests" name="2_absorbed_correctly"/>
...
</testsuite>

И когда я делаю этот шаг в конвейере azure, моя сборка завершается неудачей, если какие-либо тесты в наборе тестов дают сбой:

  - task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
      testResultsFiles: '**/*.xml'
      searchFolder: '$(System.DefaultWorkingDirectory)/fe'
      mergeTestResults: true
      failTaskOnFailedTests: true

Мне бы хотелось что-то подобное для сбоя сборки, когда есть проблемы с линтингом. Я также хотел бы, чтобы пользователи увидели, какие проблемы возникают в выходных данных сборки. Спасибо

1 Ответ

0 голосов
/ 24 января 2020

Невозможно добиться аналогичного результата для lintr xml с plishTestResults@2.

Обходной путь, который вы можете попробовать - использовать задачу powershell для проверки содержимого файла lintr xml. Если содержимое не пустое, произойдет сбой конвейера в задаче powershell.

Ниже задача powershell проверит содержимое lintr. xml (<car></car>) и отобразит содержимое в журналах задач и exit 1, чтобы выполнить задачу, если содержимое равно нулю.

 - powershell: |
        [xml]$XmlDocument = Get-Content -Path "$(system.defaultworkingdirectory)/lintr.xml"

        if($XmlDocument.OuterXml){
           echo $XmlDocument.OuterXml
          }else{exit 1}

   displayName: lintr result.

enter image description here

Вы можете также использовать приведенное ниже утверждение в задаче powershell для загрузки файла lintr xml на сводную страницу сборки, где вы можете скачать

echo "##vso[task.uploadsummary]$(system.defaultworkingdirectory)/lintr.xml"

Вы можете проверить здесь для большего количества команд регистрации.

Обновление:

Обходной путь для хорошего отображения результатов lintr - создать собственное расширение для отображения html результатов в azure конвейере devops.

Вы можете попробовать создать собственное расширение и получить результаты html lint. Пожалуйста, обратитесь к ответу на эту тему пример пользовательского расширения для отображения html

Другие разработчики уже отправляют запросы в Microsoft для реализации этой функции. Пожалуйста, проголосуйте здесь или создайте новое.

...