如何将 .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
之后创建的
我是声纳云的新手,我的公司在 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
之后创建的