Java 如何通过pom运行pmd而不使Jenkins中的构建失败?
我正在通过pom.xml中的maven插件运行pmd(checkstyle和findbugs)。由于pmd报告的错误,Jenkins上的构建失败 构建阶段并行运行6个模块,我运行发布服务器和之后的另一个阶段。如果pmd失败,整个构建将失败并立即停止 这是my pom.xml中的一个片段:Java 如何通过pom运行pmd而不使Jenkins中的构建失败?,java,maven,jenkins,pmd,Java,Maven,Jenkins,Pmd,我正在通过pom.xml中的maven插件运行pmd(checkstyle和findbugs)。由于pmd报告的错误,Jenkins上的构建失败 构建阶段并行运行6个模块,我运行发布服务器和之后的另一个阶段。如果pmd失败,整个构建将失败并立即停止 这是my pom.xml中的一个片段: </properties> <failOnChecks>true</failOnChecks> </properties> <!-- ......
</properties>
<failOnChecks>true</failOnChecks>
</properties>
<!-- ...... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.8</version>
<dependencies>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-core</artifactId>
<version>${version.pmd}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-java</artifactId>
<version>${version.pmd}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-javascript</artifactId>
<version>${version.pmd}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-jsp</artifactId>
<version>${version.pmd}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>my.software</groupId>
<artifactId>build-tools</artifactId>
<version>${version.build-tools}</version>
</dependency>
</dependencies>
<configuration>
<rulesets>
<ruleset>pmd/ruleset.xml</ruleset>
</rulesets>
<failOnViolation>${failOnChecks}</failOnViolation>
</configuration>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
在到达第二阶段之前,它在构建中失败
插件不应该停止管道,而是完成管道,然后失败,然后运行发布服务器,这样我就可以在Jenkins中看到问题
到目前为止,我通过属性设置failOnViolation,但我不能让构建在最后失败。我想我需要检查一下那里的状态,然后打错电话
有没有更干净的方法来实现这一点?您可以使用目标
pmd
而不是检查,它将分析代码并生成报告,但不会使构建失败。然后配置Jenkin's并根据报告中的违规数量将构建标记为失败或不稳定
注意,当手动运行时,更改目标也将停止Maven构建失败。我们通常在
中配置maven pmd插件,而不使用
,并创建两个maven配置文件:一个默认配置文件运行maven pmd插件,目标为检查
,另一个配置文件为jenkins
,目标为pmd
。通过这种方式,开发人员可以手动运行构建,当存在PMD冲突时,构建将失败,而当在Jenkins上使用profileJenkins
运行时,构建不会失败。首先,为什么您定义了插件的依赖项?此外,您是否已经检查过通过以下方式调用Maven:mvn--fail at end…
?1:这是由一位同事完成的。我想他这样做是有原因的。我可能会把它们拿走。2:--最终失败可能不起作用,因为每个构建都运行自己的mvn命令--fail never可能也不太好,因为它可能会抑制任何其他故障。将这些依赖项添加到插件中并没有真正意义,因为插件已经具有这些依赖项…您是否使用CI解决方案来运行这些生成?如果是,您可以更改maven调用的配置。-fae
不会停止管道。如果生成有问题,则管道将停止。如果在这种情况下需要继续,则需要在管道中缓存错误…当您想要运行最新版本的PMD时,依赖项是有意义的。maven pmd插件通常落后于几个pmd版本,因为其更新频率低于pmd本身。到目前为止,maven pmd插件使用pmd 5.6.1,而pmd的最新版本是5.8.1。
stage('modules') {
gitlabCommitStatus('modules') {
parallel Config.stepsForParallel
}
}
stage('Jenkins Code Analysis') {
pmd canRunOnFailed: true, canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '', unHealthy: ''
checkstyle canRunOnFailed: true, canComputeNew: false, defaultEncoding: '', healthy: '', pattern: '', unHealthy: ''
//findbugs canComputeNew: false, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', pattern: '', unHealthy: ''
}