网站搜索

typescript - Maven 的 SonarQube 扫描器和 SonarTs 插件无法运行 node


我正在使用 SonarQube 5.6.1 进行代码分析(代码使用 Spring Boot 和 Angular(使用 TypeScript)编写)。在 Java 和 TypeScript 的代码扫描中,分别使用 SonarQube Scanner for Maven 3.4.0.905 和 SonarTsPlugin 1.1.0。

在我的 pom.xml 中,我设置了以下属性:

<frontend.directory>frontend</frontend.directory>
<sonar.host.url>http://sonarqube.some-url.local/</sonar.host.url>
<sonar.sources>src/main/java,${frontend.directory}/src/app,pom.xml</sonar.sources>
<sonar.exclusions>${frontend.directory}/node_modules/**</sonar.exclusions>
<sonar.tests>${frontend.directory}/src/app,src/test/java</sonar.tests>
<sonar.test.inclusions>**/*.spec.ts,src/test/java/**/*.java</sonar.test.inclusions>
<sonar.testExecutionReportPaths>${frontend.directory}/reports/ut_report.xml</sonar.testExecutionReportPaths>
<sonar.ts.coverage.lcovReportPath>${frontend.directory}/coverage/lcov.info</sonar.ts.coverage.lcovReportPath>
<sonar.ts.tslint.configPath>${frontend.directory}/tslint.json</sonar.ts.tslint.configPath>
<sonar.ts.tslint.nodePath>${frontend.directory}/node/node</sonar.ts.tslint.nodepath>
<sonar.ts.tslint.path>${frontend.directory}/node_modules/.bin/tslint</sonar.ts.tslint.path>

请注意,我将 sonar.ts.tslint.nodePath 指向如下安装的本地 node。

我使用 frontend-maven-plugin 1.6 来安装 npm 和 node:

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>1.6</version>

    <configuration>
        <workingDirectory>${frontend.directory}</workingDirectory>
    </configuration>

    <executions>
        <execution>
        <id>install node and npm</id>
        <goals>
            <goal>install-node-and-npm</goal>
        </goals>
        <configuration>
            <nodeVersion>v10.1.0</nodeVersion>
            <npmVersion>6.0.1</npmVersion>
        </configuration>
        </execution>
        ...
    </executions>
</plugin>

我运行 ./mvnw sonar:sonar 来启动 SonarQube 扫描器。然而,当 SonarTsPlugin 运行并试图运行 tslint 时,nodePath 被忽略,而使用的是全局节点。这在我的 Jenkins 服务器上导致了以下错误:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar (default-cli) on project nsgra-web: java.io.IOException: Cannot run program "node": error=2, No such file or directory -> [Help 1]

这对我来说很奇怪,因为 node 是通过 frontend-maven-plugin 安装的,而我在 sonar.ts.tslint.nodePath 中指向的是那个 node 二进制文件。

有人有任何见解吗?

答案#1

感谢Aerus的回复。

我在使用 Jenkins 的 Docker 容器中发现了同样的问题。

我已经安装了 Maven,但没有安装 Node,然后 Maven 在 ./node/ 文件夹中创建了一个本地的 Node 安装。当 TS Sonar 尝试执行 Node 以了解当前版本时,出现了注释的错误,并且所有 .ts 文件都被忽略了。

我按照你的建议解决了问题,并将这个添加到命令行执行中

-Dsonar.typescript.node=./node/node