首页 > 解决方案 > 如何将 .coverage 文件发送到 SonarCloud

问题描述

我是声纳云的新手,我的公司在 AzureDevOps Pipeline 中实现了它。我们面临的问题是,要了解我们的代码覆盖率,我们必须创建一个拉取请求并在 devops 中构建解决方案,以便对代码进行分析。

所以我试图在本地执行此操作,我安装了 SonarQube 和 SonarScanner,当我运行 sonarQube 文档提供的命令时,它运行没有问题,但是当我检查 sonarcloud 页面时,我的项目代码覆盖率为 0%。我想我在运行的命令中遗漏了一步,但我找不到解决方案。

我运行的命令是:

    dotnet sonarscanner begin /k:"project-key" /d:sonar.login="myToken" /o:"myOrg"
    dotnet build "myPathTo .sln"
    dotnet test --collect "Code Coverage" (this step creates the .coverage file in my UnitTest project)
    dotnet sonarscanner end /d:sonar.login="myToken" 

命令后页面得到更新但没有代码覆盖

在此处输入图像描述

你们能帮我解决缺少的步骤吗?

提前致谢

标签: sonarqubesonarcloudsonarscanner

解决方案


Sonar 仅在非常特定的位置查找 Coverage 文件(或者在我们的版本中查找)。当我们在我们的 .NET 核心项目上进行构建时,我们必须调整扫描仪的输出以便像这样拾取它(我知道这是一个 Azure 管道,但命令是相同的):

.NET Core 声纳

从参数中可以看出,我们将覆盖文件重新路由到工作文件夹下 Azure 管道中的 TestResults 文件夹。

这可能是您的问题,也可能不是,但您应该看到工具在代码分析阶段查看的路径:

代码分析

如果它说“未找到覆盖文件”之类的内容,则表示该文件未包含在它正在查找的路径中。查看任何输出文件,或打开详细日志记录并查看它在做什么。

这就是它为我们工作的原因。这似乎只发生在 .NET 核心项目上,.NET 框架解决方案似乎默认被选中。更高版本的声纳可能已经改变了这一点。


推荐阅读