Выход CMD с кодом 4 в задаче командной строки Azure devops

#cmd #azure-devops #pmd

#cmd #azure-devops #pmd

Вопрос:

У меня есть задача командной строки, запущенная в Windows-образе конвейера Azure DevOps. Эта задача после выполнения команды pmd.bat завершается с кодом 4. Где, поскольку это отлично работает в моем локальном CMD.

  task: CmdLine@2
  inputs:
   script:  |
       echo starting  execution
       cd $(Build.SourcesDirectory)
       xcopy *.jar $(Build.SourcesDirectory)code
       cd $(Build.SourcesDirectory)pmd-bin-6.24.0bin
       pmd.bat -d "$(Build.SourcesDirectory)codesrcapexcode.cls" -f xml -R "$(Build.SourcesDirectory)codebuildMyApexRule.xml" -reportfile pmd.xml
  

Кто-нибудь может мне помочь, в чем может быть проблема?

Ответ №1:

Выход с кодом 4 в PMD предполагает, что обнаружено по крайней мере одно нарушение.

Вот два решения, позволяющие заставить команду работать:

  1. Вы можете установить параметру <failurePriority> значение 1 (его значение по умолчанию равно 5), чтобы все нарушения воспринимались как предупреждение и отображались в выходных данных сборки. И затем вы можете увидеть, где команда выполняется неправильно.

  2. Вы можете установить для параметра <failOnViolation> значение false (его значение по умолчанию равно true ), чтобы команды не выполнялись с ошибкой, даже если проверка проверки завершится неудачей. Единственное отличие от решения 1 заключается в том, что предупреждающие сообщения не отображаются.

Вы можете задать параметры в файле POM:

 <build>
 <plugins>
  <plugin>
    <failurePriority>1</failurePriority>
    <failOnViolation>false</failOnViolation>
  </plugin>
 </plugins>
</build>
  

или задайте их в качестве свойств во встроенном скрипте pmd.bat.

Комментарии:

1. Нет, проблема, похоже, не в ошибке xcopy, потому что я вижу в журнале, шаг xcopy сработал нормально, и файл скопирован правильно.

2. запуск выполнения D:apexcustom-rule-1.0.0-SNAPSHOT.jar скопированный 1 файл (ы) Успешно обработал 8 файлов; Сбой при обработке 0 файлов D:a1scodebuild D:a1spmd-bin-6.24.0bin .. D:a1s 17 августа 2020 г., 6:10:15 УТРА net.sourceforge.pmd. PMD поощряет временный анализ ПРЕДУПРЕЖДЕНИЕ: Этот анализ мог бы быть быстрее, пожалуйста, рассмотрите возможность использования инкрементного анализа: pmd.github.io/pmd-6.24.0/pmd_userdocs_incremental_analysis.html ##[ошибка]Cmd.exe завершается с кодом ‘4’. Завершение: командная строка

3. @priya Выход без сообщения об ошибке довольно странный. Вы когда-нибудь пытались запустить задачу без pmd.pat команды?

4. целью задачи было выполнить pmd.bat и сгенерировать файл отчета… это отлично работает в моем local…so никаких проблем с the bat file..am не удается понять, почему он завершает работу и не выполняет задачу

5. @priya Выход с кодом 4 в PMD предполагает, что обнаружено по крайней мере одно нарушение. Вы можете установить параметру <failurePriority> значение 1 (его значение по умолчанию равно 5), чтобы все нарушения воспринимались как предупреждение и отображались в выходных данных сборки. И затем вы можете увидеть, где команда выполняется неправильно.

Ответ №2:

Как правильно объяснила Джейн Ма-MSFT, код выхода 4 означает, что обнаружены некоторые нарушения и сборка завершилась неудачно.

Смотрите https://pmd.github.io/latest/pmd_userdocs_cli_reference.html#exit-status для документации.

4: Обнаружено по крайней мере одно нарушение, если не установлено значение -failOnViolation false.

Вы могли бы настроить свой скрипт на add -failOnVioltation false , если вы никогда не хотите, чтобы сборка завершалась неудачно, и просто хотите, чтобы был сгенерирован отчет:

Указывает, завершается ли PMD с ненулевым статусом, если обнаружены нарушения. По умолчанию PMD завершается со статусом 4, если обнаружены нарушения. Отключите эту функцию с помощью -failOnViolation false , чтобы вместо этого завершить работу с 0 и просто вывести отчет.