[hermes] bstein-dev-home #569: sonarqube_analysis_missing_nodejs #701

Open
opened 2026-09-30 09:46:04 +00:00 by hermes-automation · 0 comments

Hermes auto-triage classified incident bstein-dev-home/569 as sonarqube_analysis_missing_nodejs (confidence 0.75); first failed gate: Publish test metrics.

Why a human is needed

This build didn't fail because of a code or test regression — backend tests passed in full (128/128) and the frontend npm install finished cleanly. The failure traces to the SonarQube static-analysis step: its JavaScript/TypeScript sensor tried to run node -v and couldn't find a Node.js binary at all ('Cannot run program "node": No such file or directory'), which is a hard requirement for that sensor to do its job. Jenkins' own pipeline metadata names 'Publish test metrics' as the first stage that failed, and everything after that (including 'Build & push backend' and publishing build assets to Gitea) was skipped as a direct consequence. Fixing this means making sure Node.js is actually present wherever this scan step runs — either add it to the container/agent image used for the SonarQube stage, or configure sonar.javascript.node.path to point at a Node binary that already exists in that environment — and then confirming on a rerun that the JavaScript and TypeScript sensors complete without that exception.

Ariadne did not authorize automated remediation: classification_not_supported: 'sonarqube_analysis_missing_nodejs'.

Facts

  • jenkins — Build 569 for job bstein-dev-home finished with result FAILURE, running from 09:26:00.648Z to 09:42:38.141Z (about 16.6 minutes). (jenkins.result, jenkins.timestamps)
  • jenkins — Jenkins reports 'Publish test metrics' as the first_failed_stage of the pipeline. (jenkins.first_failed_stage)
  • jenkins — The SonarQube scanner's JavaScript analysis sensor threw NodeCommandException 'Error when running: node -v. Is Node.js available during analysis?' at 09:32:04.957, with root cause java.io.IOException: Cannot run program "node": error=2, No such file or directory. (jenkins.console_failures[0] (line 324) and console_failures[1] (line 360))
  • jenkins — Backend tests completed successfully in this same build: '128 passed in 30.95s', backend_rc=0. (jenkins.console_failures[2] (line 685))
  • jenkins — jenkins.failed_tests is empty — no structured failing test was published for this build. (jenkins.failed_tests)
  • jenkins — The 'Build & push backend' stage was skipped due to earlier failure(s); the pipeline ended with 'ERROR: script returned exit code 1' and Gitea asset publishing was skipped because the build was non-successful. (jenkins.console_tail)
  • opensearch — OpenSearch log correlation for this incident's time window failed with 'Connection refused', so no independent log records are available. (log_evidence.error)

Evidence

The earliest failure region of the build console:

09:31:53.747 INFO  Sensor JaCoCo XML Report Importer [jacoco] (done) | time=8ms
09:31:53.747 INFO  Sensor IaC CloudFormation Sensor [iac]
09:31:54.050 INFO  0 source files to be analyzed
09:31:54.227 INFO  0/0 source files have been analyzed
09:31:54.228 INFO  Sensor IaC CloudFormation Sensor [iac] (done) | time=481ms
09:31:54.228 INFO  Sensor IaC Kubernetes Sensor [iac]
09:31:54.500 INFO  0 source files to be analyzed
09:31:54.851 INFO  0/0 source files have been analyzed
09:31:54.854 INFO  Sensor IaC Kubernetes Sensor [iac] (done) | time=626ms
09:31:54.855 INFO  Sensor JavaScript analysis [javascript]
09:32:04.957 ERROR Error when running: 'node -v'. Is Node.js available during analysis?
org.sonarsource.nodejs.NodeCommandException: Error when running: 'node -v'. Is Node.js available during analysis?
	at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:79)
	at org.sonarsource.nodejs.NodeCommandBuilderImpl.getVersion(NodeCommandBuilderImpl.java:203)
	at org.sonarsource.nodejs.NodeCommandBuilderImpl.checkNodeCompatibility(NodeCommandBuilderImpl.java:169)
	at org.sonarsource.nodejs.NodeCommandBuilderImpl.build(NodeCommandBuilderImpl.java:143)
	at org.sonar.plugins.javascript
... (truncated; the full log is in the linked build)

Inferences

  • The Node.js binary appears to be missing from whatever container/agent image runs the SonarQube scan step, so the JavaScript/TypeScript sensor can't shell out to node. It's inferred, not directly proven, that this specific error is what ultimately produced the 'exit code 1' seen later, since th...
  • Since backend tests passed cleanly (128/128) and the frontend npm install completed without error, the regression is very unlikely to be in application or test code — it looks like a gap in the CI environment used for static analysis rather than a code change breaking anything.
  • The SonarQube sensor logged the Node error as ERROR but then still reported 'done' and moved on to run the TypeScript sensor, so the scan process itself may have limped forward rather than crashing immediately; the actual point where the pipeline turned this into a hard failure (in the 'Publish t...

Suggested remediation (not available)

No automated remediation exists for this failure. Hermes proposes one; it was not performed, and Ariadne cannot perform it until a person builds and deploys it.

  • Proposed action: ensure_node_available_for_sonar_scan
  • What it would do: Make sure the Jenkins agent/container image used for the SonarQube analysis step actually has a Node.js binary on PATH (install it in the image, or point sonar.javascript.node.path at an existing node binary in that environment), so the JS/TS sensors can run instead of throwing NodeCommandException.
  • Evidence that should be required first: Multiple builds across different commits/branches showing the same 'Cannot run program "node": No such file or directory' error from the SonarQube scanner step, confirming this is a standing property of the analysis container/image rather than a one-off agent glitch.

Filed automatically by Ariadne from a Hermes Agent diagnosis (run run_35b257a6d3d1484f868126887187ee2a). Hermes has no write access to this repository; no files or infrastructure were changed.

Hermes auto-triage classified incident `bstein-dev-home/569` as **sonarqube_analysis_missing_nodejs** (confidence 0.75); first failed gate: `Publish test metrics`. ## Why a human is needed This build didn't fail because of a code or test regression — backend tests passed in full (128/128) and the frontend npm install finished cleanly. The failure traces to the SonarQube static-analysis step: its JavaScript/TypeScript sensor tried to run `node -v` and couldn't find a Node.js binary at all ('Cannot run program "node": No such file or directory'), which is a hard requirement for that sensor to do its job. Jenkins' own pipeline metadata names 'Publish test metrics' as the first stage that failed, and everything after that (including 'Build & push backend' and publishing build assets to Gitea) was skipped as a direct consequence. Fixing this means making sure Node.js is actually present wherever this scan step runs — either add it to the container/agent image used for the SonarQube stage, or configure sonar.javascript.node.path to point at a Node binary that already exists in that environment — and then confirming on a rerun that the JavaScript and TypeScript sensors complete without that exception. Ariadne did not authorize automated remediation: `classification_not_supported: 'sonarqube_analysis_missing_nodejs'`. ## Facts - **jenkins** — Build 569 for job bstein-dev-home finished with result FAILURE, running from 09:26:00.648Z to 09:42:38.141Z (about 16.6 minutes). (`jenkins.result, jenkins.timestamps`) - **jenkins** — Jenkins reports 'Publish test metrics' as the first_failed_stage of the pipeline. (`jenkins.first_failed_stage`) - **jenkins** — The SonarQube scanner's JavaScript analysis sensor threw NodeCommandException 'Error when running: node -v. Is Node.js available during analysis?' at 09:32:04.957, with root cause java.io.IOException: Cannot run program "node": error=2, No such file or directory. (`jenkins.console_failures[0] (line 324) and console_failures[1] (line 360)`) - **jenkins** — Backend tests completed successfully in this same build: '128 passed in 30.95s', backend_rc=0. (`jenkins.console_failures[2] (line 685)`) - **jenkins** — jenkins.failed_tests is empty — no structured failing test was published for this build. (`jenkins.failed_tests`) - **jenkins** — The 'Build & push backend' stage was skipped due to earlier failure(s); the pipeline ended with 'ERROR: script returned exit code 1' and Gitea asset publishing was skipped because the build was non-successful. (`jenkins.console_tail`) - **opensearch** — OpenSearch log correlation for this incident's time window failed with 'Connection refused', so no independent log records are available. (`log_evidence.error`) ## Evidence The earliest failure region of the build console: ``` 09:31:53.747 INFO Sensor JaCoCo XML Report Importer [jacoco] (done) | time=8ms 09:31:53.747 INFO Sensor IaC CloudFormation Sensor [iac] 09:31:54.050 INFO 0 source files to be analyzed 09:31:54.227 INFO 0/0 source files have been analyzed 09:31:54.228 INFO Sensor IaC CloudFormation Sensor [iac] (done) | time=481ms 09:31:54.228 INFO Sensor IaC Kubernetes Sensor [iac] 09:31:54.500 INFO 0 source files to be analyzed 09:31:54.851 INFO 0/0 source files have been analyzed 09:31:54.854 INFO Sensor IaC Kubernetes Sensor [iac] (done) | time=626ms 09:31:54.855 INFO Sensor JavaScript analysis [javascript] 09:32:04.957 ERROR Error when running: 'node -v'. Is Node.js available during analysis? org.sonarsource.nodejs.NodeCommandException: Error when running: 'node -v'. Is Node.js available during analysis? at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:79) at org.sonarsource.nodejs.NodeCommandBuilderImpl.getVersion(NodeCommandBuilderImpl.java:203) at org.sonarsource.nodejs.NodeCommandBuilderImpl.checkNodeCompatibility(NodeCommandBuilderImpl.java:169) at org.sonarsource.nodejs.NodeCommandBuilderImpl.build(NodeCommandBuilderImpl.java:143) at org.sonar.plugins.javascript ... (truncated; the full log is in the linked build) ``` ## Inferences - The Node.js binary appears to be missing from whatever container/agent image runs the SonarQube scan step, so the JavaScript/TypeScript sensor can't shell out to `node`. It's inferred, not directly proven, that this specific error is what ultimately produced the 'exit code 1' seen later, since th... - Since backend tests passed cleanly (128/128) and the frontend npm install completed without error, the regression is very unlikely to be in application or test code — it looks like a gap in the CI environment used for static analysis rather than a code change breaking anything. - The SonarQube sensor logged the Node error as ERROR but then still reported 'done' and moved on to run the TypeScript sensor, so the scan process itself may have limped forward rather than crashing immediately; the actual point where the pipeline turned this into a hard failure (in the 'Publish t... ## Suggested remediation (not available) No automated remediation exists for this failure. Hermes proposes one; it was not performed, and Ariadne cannot perform it until a person builds and deploys it. - Proposed action: `ensure_node_available_for_sonar_scan` - What it would do: Make sure the Jenkins agent/container image used for the SonarQube analysis step actually has a Node.js binary on PATH (install it in the image, or point sonar.javascript.node.path at an existing node binary in that environment), so the JS/TS sensors can run instead of throwing NodeCommandException. - Evidence that should be required first: Multiple builds across different commits/branches showing the same 'Cannot run program "node": No such file or directory' error from the SonarQube scanner step, confirming this is a standing property of the analysis container/image rather than a one-off agent glitch. ## Links - Failed build: https://ci.bstein.dev/job/bstein-dev-home/569/ - Full evidence bundle and audit trail live in Ariadne at `/api/admin/audit/events`, event types `hermes_autotriage_incident` and `hermes_autotriage_diagnosis`. Filed automatically by Ariadne from a Hermes Agent diagnosis (run [run_35b257a6d3d1484f868126887187ee2a](https://triage.bstein.dev/chat?resume=run_35b257a6d3d1484f868126887187ee2a)). Hermes has no write access to this repository; no files or infrastructure were changed. <!-- hermes-triage job=bstein-dev-home classification=sonarqube_analysis_missing_nodejs incident=bstein-dev-home/569 -->
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bstein/bstein-dev-home#701
No description provided.