Хобрук: Ваш путь к мастерству в программировании

Sonarqube выдает ошибку node.js при запуске сонара-сканера

При запуске сонарного сканера через Jenkins мы получаем следующее сообщение об ошибке. Jenkins и Sonarqube были установлены в ОС Windows Server 2008. Я также пробовал установить node.js на сервер, но все равно получаю то же сообщение об ошибке.

Что нам не хватает? И зачем нам этот Node.js для анализа? Мы в основном анализируем приложение HTML. Хотя мы получаем приведенное ниже сообщение об ошибке, выполнение завершается успешно. Но мы пытаемся найти основную причину приведенной ниже ошибки.

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:77)
    at org.sonarsource.nodejs.NodeCommandBuilderImpl.getVersion(NodeCommandBuilderImpl.java:171)
    at org.sonarsource.nodejs.NodeCommandBuilderImpl.checkNodeCompatibility(NodeCommandBuilderImpl.java:144)
    at org.sonarsource.nodejs.NodeCommandBuilderImpl.build(NodeCommandBuilderImpl.java:120)
    at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.initNodeCommand(EslintBridgeServerImpl.java:129)
    at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.startServer(EslintBridgeServerImpl.java:105)
    at org.sonar.plugins.javascript.eslint.EslintBridgeServerImpl.startServerLazily(EslintBridgeServerImpl.java:145)
    at org.sonar.plugins.javascript.eslint.EslintBasedRulesSensor.execute(EslintBasedRulesSensor.java:92)
    at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
    at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)
    at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:59)
    at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:77)
    at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:59)
    at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:82)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:359)
    at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:354)
    at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:317)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:128)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122)
    at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73)
    at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
    at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:185)
    at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: java.io.IOException: Cannot run program "node": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at org.sonarsource.nodejs.NodeCommand$ProcessWrapperImpl.start(NodeCommand.java:154)
    at org.sonarsource.nodejs.NodeCommand.start(NodeCommand.java:73)
    ... 37 common frames omitted
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 40 common frames omitted
18.04.2019

  • Вы пробовали запускать node -v непосредственно на своем сервере (из командной строки)? Каталог установки Node.js находится в вашей переменной окружения Path? 19.04.2019
  • @WiktorBednarz, да, выполнение node -v в командной строке работает нормально, а также я проверил переменную среды Path, где указан путь установки node.js. 20.04.2019
  • Хочу ли я установить плагин NodeJS на Jenkins? 20.04.2019
  • У меня было то же сообщение об ошибке, что и у вас. Для меня проблема была решена после добавления пути установки узла в Path. В какой-то момент SonarQube хочет выполнить node -v, но не может его найти. Кажется, он выполняется как часть плагина ESLint. Поскольку я сам не использую Jenkins, я не уверен, что установка плагина NodeJS поможет, но попробовать определенно стоит! 23.04.2019

Ответы:


1

У вас установлен подключаемый модуль языка CSS, для которого требуется Node.js в качестве предварительного условия, см. плагин документация.

В комментариях к вопросу указано, что вы должны поместить каталог установки Node.js в PATH, но документация предлагает правильно настроить sonar.nodejs.executable, чтобы получить тот же эффект.

18.10.2019

2

Обновите версию nodejs до altest и повторите попытку.

12.10.2020

3

Я думаю, что я мог бы быть на что-то, учитывая, что я могу заставить его работать.

По сути, SonarQube без проблем работал с отчетами lcov (которые генерируются большинством отчетов Karma по умолчанию — поскольку он настроен по умолчанию в Angular/React). Однако проблемы с памятью начались после того, как я интегрировал плагин karma-sonarqube-reporter в Karma.

В нескольких других ответах на Stackoverflow указывалось, что двоичный файл был поврежден, однако для меня это не было проблемой, поскольку переустановка ничего не дала.

Если посмотреть на плагин sonarqube-scanner - говорят, что бинарник скачан с этого URL здесь< /а>. Здесь следует отметить, что все двоичные файлы имеют версию ‹ 6.2. Это означает, что karma-sonarqube-reporter должен выводить результат в legacyMode. Если вы это сделаете, SonarQube сможет нормально разобрать этот файл без каких-либо проблем с памятью.

Прикрепляю свою конфигурацию от karma.conf.js для плагина karma-sonarqube-reporter:

    sonarqubeReporter: {
      basePath: 'src/app',        // test files folder
      filePattern: '**/*spec.ts', // test files glob pattern
      encoding: 'utf-8',          // test files encoding
      outputFolder: 'reports',    // report destination
      legacyMode: true,          // report for Sonarqube < 6.2 (disabled)
      reportName: function(metadata) { // report name callback, but accepts also a
        // string (file name) to generate a single file
        /**
         * Report metadata array:
         * - metadata[0] = browser name
         * - metadata[1] = browser version
         * - metadata[2] = plataform name
         * - metadata[3] = plataform version
         */
        return 'sonarqube_report.xml';
      },

Примечание. legacyMode установлено значение true. Как только я это сделаю - мне даже не нужно было давать свойство max-memory для сонар-сканера.

03.08.2021
Новые материалы

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.