CMD 在 Azure devops 命令行任务中以代码 4 退出

CMD exiting with code 4 in Azure devops Command line task

我在 Azure DevOps 管道的 windows 图像中有一个命令行任务 运行。 此任务在执行 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.0\bin
       pmd.bat -d "$(Build.SourcesDirectory)\code\src\apexcode.cls" -f xml -R "$(Build.SourcesDirectory)\code\build\MyApexRule.xml" -reportfile pmd.xml

任何人都可以帮助我解决问题吗?

在 PMD 中以代码 4 退出表明至少检测到一处违规。

这里有两个使命令起作用的解决方案:

  1. 您可以将参数<failurePriority>设置为1(默认值为5),这样所有的违规行为都将被视为警告并显示在构建输出中。然后就可以看到命令哪里出错了

  2. 您可以将参数<failOnViolation>设置为false(默认值为true),这样即使验证检查失败。与解决方案 1 的唯一区别是没有显示警告消息。

您可以在POM文件中设置参数:

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

或将它们设置为 pmd.bat 内联脚本的属性。

正如 Jane Ma-MSFT 正确解释的那样,退出代码 4 表示检测到一些违规并且构建失败。

有关文档,请参阅 https://pmd.github.io/latest/pmd_userdocs_cli_reference.html#exit-status

4: At least one violation has been detected, unless -failOnViolation false is set.

如果您不希望构建失败而只想生成报告,则可以调整脚本以添加 -failOnVioltation false

Specifies whether PMD exits with non-zero status if violations are found. By default PMD exits with status 4 if violations are found. Disable this feature with -failOnViolation false to exit with 0 instead and just output the report.