发生R linting问题时,如何使天蓝色devops构建失败

时间:2020-01-23 19:03:04

标签: r azure-devops lintr

我在R中使用lintr库在代码中查找棉绒问题。我将它们放入这样的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 :(得分:0)

对于使用plishTestResults@2的lintr xml,不可能获得类似的结果。

您可以尝试的解决方法是使用powershell任务来检查lintr xml文件的内容。如果内容不为空,则在powershell任务中使管道失败。

下面的powershell任务将检查lintr.xml(<car></car>)的内容,并将该内容回显到任务日志中,如果内容为null,则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"

您可以检查here了解更多日志记录命令。

更新:

一种以良好方式显示lintr结果的解决方法是创建一个自定义扩展名,以在azure devops管道中显示html结果。

您可以尝试创建自定义扩展名,并产生html皮棉结果。请参考该线程an example custom extension to display html的答案

其他开发人员已经向Microsoft提交了实施此功能的请求。请投票给here或创建一个新的