如何通过 pom 运行 pmd 而不会在 Jenkins 中构建失败?
How to run pmd through pom without failing the build in Jenkins?
我在 pom.xml 中通过 maven 插件 运行ning pmd(还有 checkstyle 和 findbugs)。由于 pmd 报告的错误,基于 Jenkins 的构建失败。
构建阶段 运行 并行的 6 个模块,我 运行 发布者和之后的另一个阶段。如果 pmd 失败,整个构建将失败并立即停止。
这是我的 pom.xml 的片段:
</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>
Jenkinsfile 有这两个阶段:
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: ''
}
在到达第二阶段之前构建失败。
插件不应该停止管道,而是完成它然后失败,然后 运行 发布者,所以我可以在 Jenkins 中看到问题。
到目前为止,我通过 属性 设置了 failOnViolation,但最后我无法让构建失败。我想我需要在某处检查状态并调用错误。
有没有更简洁的方法来实现这一目标?
您可以使用目标 pmd
而不是 check
,后者将分析代码并生成报告,但构建不会失败。然后配置 Jenkin 的 PMD Plugin and Static Code Analysis Plugin 以根据报告中的违规次数将构建标记为失败或不稳定。
请注意,当 运行 手动更改目标时,Maven 构建也会停止失败。我们通常在 <pluginManagement>
中配置 maven-pmd-plugin 而没有 <executions>
并创建两个 Maven 配置文件:一个默认配置文件 运行s maven-pmd-plugin 目标 check
和目标 pmd
的配置文件 jenkins
。通过这种方式,开发人员可以 运行 手动构建,当存在 PMD 违规时它将失败,而当 Jenkins 上 运行 配置文件 jenkins
.[=19 时它不会失败=]
我在 pom.xml 中通过 maven 插件 运行ning pmd(还有 checkstyle 和 findbugs)。由于 pmd 报告的错误,基于 Jenkins 的构建失败。
构建阶段 运行 并行的 6 个模块,我 运行 发布者和之后的另一个阶段。如果 pmd 失败,整个构建将失败并立即停止。
这是我的 pom.xml 的片段:
</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>
Jenkinsfile 有这两个阶段:
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: ''
}
在到达第二阶段之前构建失败。
插件不应该停止管道,而是完成它然后失败,然后 运行 发布者,所以我可以在 Jenkins 中看到问题。
到目前为止,我通过 属性 设置了 failOnViolation,但最后我无法让构建失败。我想我需要在某处检查状态并调用错误。
有没有更简洁的方法来实现这一目标?
您可以使用目标 pmd
而不是 check
,后者将分析代码并生成报告,但构建不会失败。然后配置 Jenkin 的 PMD Plugin and Static Code Analysis Plugin 以根据报告中的违规次数将构建标记为失败或不稳定。
请注意,当 运行 手动更改目标时,Maven 构建也会停止失败。我们通常在 <pluginManagement>
中配置 maven-pmd-plugin 而没有 <executions>
并创建两个 Maven 配置文件:一个默认配置文件 运行s maven-pmd-plugin 目标 check
和目标 pmd
的配置文件 jenkins
。通过这种方式,开发人员可以 运行 手动构建,当存在 PMD 违规时它将失败,而当 Jenkins 上 运行 配置文件 jenkins
.[=19 时它不会失败=]