Sonarscanner 命令突然失败

Sonarscanner command is failing abruptly

我们正在使用 gitlab 管道,其中 Sonarscanner 用于扫描代码。代码库是 .NET,所有单元测试用例连同代码库构建和执行都很好。

最近在集成 sonarqube 后,它突然失败并出现以下错误。 命令是:

 - dotnet sonarscanner end -d:sonar.login="$SONAR_TOKEN"

ERROR: Error during SonarScanner execution java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: c???out at

java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:145) at java.base/sun.nio.fs.UnixPath.(UnixPath.java:69) at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:279) at java.base/java.nio.file.Path.resolve(Path.java:515) at org.sonar.scm.git.IncludedFilesRepository.indexFiles(IncludedFilesRepository.java:65) at org.sonar.scm.git.IncludedFilesRepository.(IncludedFilesRepository.java:40) at org.sonar.scm.git.GitIgnoreCommand.init(GitIgnoreCommand.java:37) at org.sonar.scanner.scan.filesystem.ProjectFileIndexer.index(ProjectFileIndexer.java:104) at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:352) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123) at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:149) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123) at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72) at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) at com.sun.proxy.$Proxy0.execute(Unknown Source) at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189) at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138) at org.sonarsource.scanner.cli.Main.execute(Main.java:112) at org.sonarsource.scanner.cli.Main.execute(Main.java:75) at org.sonarsource.scanner.cli.Main.main(Main.java:61)

错误:

SonarQube Scanner did not complete successfully

实际上,直到几天前,一切都运行良好。 SonarQube 也没有改变任何东西。 无法理解问题出在哪里。

没有sonarqube,一切正常。 有人可以建议吗?

您是否向代码库添加了文件名或内容中包含特殊字符的文件?

也可能是编码问题。确保启动 sonarscanner 的编码也与文件的编码相同。

不幸的是,我不知道如何在 dotnet 中定义它。在 Java/Maven 中,您可以在 pom.xml

中使用以下 属性 进行设置
<properties>
    <sonar.sourceEncoding>Cp1252</sonar.sourceEncoding>
</properties>

编码可能以某种方式改变了。因此,您可以在构建解决方案时添加 d:sonar.sourceEncoding=UTF-8 进行编码。完整命令为:

- dotnet sonarscanner end -d:sonar.login="$SONAR_TOKEN" -d:sonar.sourceEncoding=UTF-8

此外,Git还有一个设置编码的选项:

  env:
    SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
    SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
    LANG: en_US.UTF-8 # solution for unmappable characters in file path
    LC_ALL: en_US.UTF-8