我正在使用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来安装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]
这对我来说很奇怪,因为节点是通过frontend-maven-plugin
安装的,我指的是node
中的sonar.ts.tslint.nodePath
二进制文件。
有没有人有任何见解?
答案 0 :(得分:2)
感谢Aerus的答复。
我在使用jenkins的docker pod内部发现了相同的问题。
我已经安装了maven,但没有安装node,然后maven在./node/文件夹中创建了Node的本地安装。当TS声纳试图执行节点以了解当前版本时,将出现注释错误,并且所有.ts文件都将被忽略。
我解决了您的建议,并将其添加到命令行执行中
-Dsonar.typescript.node=./node/node