Sonarqube reporting an error analyzing Typescript/Javascript

Template for a good bug report, formatted with Markdown:

  • versions used (SonarQube 8.9.0-DE, in Docker image from openjdk11, Plugin, in Jenkins (v2.263.4) pipeline)
  • error observed:
[Pipeline] withDockerContainer
15:37:14  jenkslave-service4 does not seem to be running inside a container
15:37:14  $ docker run -t -d -u 6003:6003 -e JAVA_TOOL_OPTIONS=-Duser.home=/home/gradle -v gradleHome-3:/home/gradle -w /home/jenkins-aws/workspace/pubmind-config_PR-134 -v /home/jenkins-aws/workspace/pubmind-config_PR-134:/home/jenkins-aws/workspace/pubmind-config_PR-134:rw,z -v /home/jenkins-aws/workspace/pubmind-config_PR-134@tmp:/home/jenkins-aws/workspace/pubmind-config_PR-134@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** docker.company.com/openjdk-docker:11 cat
15:37:16  $ docker top b43d27871404a8d76018bc3f7b384a752ac87982ff8f3b8311291ddc1bcb4070 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Static Analysis)
[Pipeline] sh
15:37:17  + ./gradlew -Dsonar.userHome=/home/gradle -DJAVA_VERSION=jdk-11.0.11+9 -DJAVA_HOME=/opt/java/openjdk -x compileJava -x compileTestJava -x build -x test sonarqube
15:37:17  Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/gradle
15:37:17  Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
15:37:52  
15:37:52  > Task :sonarqube
15:37:52  Unresolved imports/types have been detected during analysis. Enable DEBUG mode to see them.
15:37:53  Cobertura report not found at /home/jenkins-aws/workspace/pubmind-config_PR-134/target/site/cobertura/coverage.xml
15:37:54  CSS rules were not executed. Error when running: 'node -v'. Is Node.js available during analysis?
15:38:00  Error when running: 'node -v'. Is Node.js available during analysis?
15:38:00  org.sonarsource.nodejs.NodeCommandException: Error when running: 'node -v'. Is Node.js available during analysis?
15:38:00  	at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:81)
15:38:00  	at org.sonarsource.nodejs.NodeCommandBuilderImpl.getVersion(NodeCommandBuilderImpl.java:181)
15:38:00  	at org.sonarsource.nodejs.NodeCommandBuilderImpl.checkNodeCompatibility(NodeCommandBuilderImpl.java:159)
15:38:00  	at org.sonarsource.nodejs.NodeCommandBuilderImpl.build(NodeCommandBuilderImpl.java:134)
15:38:00  	at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.initNodeCommand(EslintBridgeServerImpl.java:174)
15:38:00  	at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.startServer(EslintBridgeServerImpl.java:119)
15:38:00  	at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.startServerLazily(EslintBridgeServerImpl.java:191)
15:38:00  	at org.sonar.plugins.javascript.eslint.AbstractEslintSensor.startBridge(AbstractEslintSensor.java:145)
15:38:00  	at org.sonar.plugins.javascript.eslint.AbstractEslintSensor.execute(AbstractEslintSensor.java:119)
15:38:00  	at org.sonar.plugins.javascript.eslint.JavaScriptEslintBasedSensor.execute(JavaScriptEslintBasedSensor.java:52)
15:38:00  	at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
15:38:00  	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
15:38:00  	at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
15:38:00  	at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
15:38:00  	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
15:38:00  	at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
15:38:00  	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
15:38:00  	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
15:38:00  	at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:392)
15:38:00  	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:388)
15:38:00  	at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:357)
15:38:00  	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
15:38:00  	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
15:38:00  	at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:150)
15:38:00  	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:137)
15:38:00  	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:123)
15:38:00  	at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
15:38:00  	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
15:38:00  	at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
15:38:00  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:38:00  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
15:38:00  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:38:00  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
15:38:00  	at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
15:38:00  	at com.sun.proxy.$Proxy69.execute(Unknown Source)
15:38:00  	at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
15:38:00  	at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
15:38:00  	at org.sonarqube.gradle.SonarQubeTask.run(SonarQubeTask.java:100)
15:38:00  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:38:00  	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
15:38:00  	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:38:00  	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
15:38:00  	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
15:38:00  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
15:38:00  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
15:38:00  	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
15:38:00  	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
15:38:00  	at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
15:38:00  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
15:38:00  	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
15:38:00  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
15:38:00  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
15:38:00  	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
15:38:00  	at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
15:38:00  	at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
15:38:00  	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
15:38:00  	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
15:38:00  	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
15:38:00  	at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
15:38:00  	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
15:38:00  	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
15:38:00  	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
15:38:00  	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
15:38:00  	at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
15:38:00  	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
15:38:00  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
15:38:00  	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
15:38:00  	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
15:38:00  	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
15:38:00  	at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
15:38:00  	at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
15:38:00  	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
15:38:00  	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
15:38:00  	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
15:38:00  	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
15:38:00  	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
15:38:00  	at java.base/java.lang.Thread.run(Thread.java:829)
15:38:00  Caused by: java.io.IOException: Cannot run program "node": error=2, No such file or directory
15:38:00  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
15:38:00  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
15:38:00  	at org.sonarsource.nodejs.NodeCommand$ProcessWrapperImpl.start(NodeCommand.java:162)
15:38:00  	at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:77)
15:38:00  	... 89 common frames omitted
15:38:00  Caused by: java.io.IOException: error=2, No such file or directory
15:38:00  	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
15:38:00  	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
15:38:00  	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
15:38:00  	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
15:38:00  	... 92 common frames omitted
15:38:00  
15:38:14  
15:38:14  The following classes needed for analysis were missing:
15:38:14    apply
15:38:14    get
15:38:14    accept
15:38:14    test
15:38:14    run
15:38:14    applyAsLong
15:38:15  
15:38:15  Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
15:38:15  Use '--warning-mode all' to show the individual deprecation warnings.
15:38:15  See https://docs.gradle.org/4.10/userguide/command_line_interface.html#sec:command_line_warnings
15:38:15  
15:38:15  BUILD SUCCESSFUL in 57s
15:38:15  1 actionable task: 1 executed
[Pipeline] }
[Pipeline] // stage
  • steps to reproduce
    Project is pure Java, new (never run on our SonarQube server)
  • potential workaround

#bug:fault

I’ve collected various logs from the server, attempting to learn what triggered node.js scanner, but no luck. Anyplace I should look for clues?

Looking at the logs, looks like there were css files in the project? To analyze them, nodejs is required: CSS | SonarQube Docs.

Running the scanner with debug logs enabled will provide more information about what files are actually being analyzed.

Do these apply?

src/main/resources/js/springfox.js:        CSSRuleList: !0,
src/main/resources/js/springfox.js:        CSSStyleDeclaration: !1,
src/main/resources/js/springfox.js:        CSSValueList: !1,
src/main/resources/swagger.html:    <link rel="stylesheet" type="text/css" href="webjars/springfox-swagger-ui/springfox.css?v=2.9.2" >
src/main/resources/swagger.html:    <link rel="stylesheet" type="text/css" href="webjars/springfox-swagger-ui/swagger-ui.css?v=2.9.2" >

I’m not sure what you mean. Are there css files being analyzed by the SonarQube scanner? Do you have debug logs of the scanner?

There are actually NO css files intended to be scanned. Is it possible the CSS analyzer is activated upon discovery of Javascript files?
(Attaching portion of debug log)
pubmind-config_PR-134_build18_sonarqube-debug-css.log (51.9 KB)

Thanks. Based on the logs, it looks like the it’s the javascript sensor that is triggering the error, because it requires nodejs. The javascript sensor runs if there are js files being scanned, and that appears to be the case:

[2021-07-27T01:01:39.429Z] 01:01:39.279 [DEBUG] [org.sonarqube.gradle.SonarQubeTask] 'src/main/resources/js/springfox.js' indexed with language 'js'

I suggest that you install nodejs in the machine where the scan runs or you configure the scanner (or the project in sonarqube) to exclude files that you don’t want to scan: Narrowing the Focus | SonarQube Docs