SonarQube Scanner for Maven和SonarTsPlugin无法运行节点

时间:2018-06-14 23:03:12

标签: maven typescript jenkins sonarqube sonarqube-scan

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

在我的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指向安装的本地节点,如下所示。

我使用frontend-maven-plugin 1.6来安装npmnode

<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]

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

有没有人有任何见解?

1 个答案:

答案 0 :(得分:2)

感谢Aerus的答复。

我在使用jenkins的docker pod内部发现了相同的问题。

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

我解决了您的建议,并将其添加到命令行执行中

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