如何将 .coverage 文件发送到 SonarCloud

How to send .coverage file to SonarCloud

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

所以我尝试在本地执行此操作,我安装了 SonarQube 和 SonarScanner,当我 运行 sonarQube 文档提供的命令时 运行s 没有问题,但是当我检查 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" 

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

你们能帮我补一下遗漏的步骤吗?

提前致谢

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

正如您从参数中看到的那样,我们将覆盖率文件重新路由到工作文件夹下 Azure 管道中的 TestResults 文件夹。

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

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

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

所以我成功了。 在“开始”命令中,我缺少文件所在的目录。 而且在“测试”命令中,我缺少与第一个目录匹配的输出目录。之后我就可以上传文件了,如图所示。

我有一个问题,因为我必须指向确切的文件,而这根本不是动态的,每次我都必须编辑命令以指向正确的文件位置

我现在的命令是:

dotnet sonarscanner begin /k:"myKey" /d:sonar.login="myToken" /o:"myOrg" /d:sonar.cs.vscoveragexml.reportsPaths="C:\TestResults\DotnetCoverage.coveragexml"

dotnet build "pathToSLN"

dotnet test --collect "Code Coverage" --results-directory "C:\TestResults"

CodeCoverage.exe analyze /output:"C:\TestResults\DotnetCoverage.coveragexml" "C:\TestResults\c887677b-b89e-4222-93e4-09e563b48b7a\randomGeneratedFileName.coverage"

dotnet sonarscanner end /d:sonar.login="myToken" 

如您所见,当我 运行 代码覆盖命令时,我必须匹配新目录,该文件是在 ../guidId/randomGeneratedFileName.coverage

之后创建的