私はpom.xml内のmavenプラグインを介してpmd(checkstyleとfindbugsも同様に)を実行しています。 Jenkinsのビルドは、pmdによって報告されたエラーのために失敗します。ジェンキンスのビルドに失敗せずにpmdからpomを実行するには?
ビルドステージは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は、これらの2つの段階があります。
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を設定しましたが、最後にビルドに失敗することはできません。私はどこかでステータスをチェックしてエラーを呼び出す必要があると思う。
これを達成するためのクリーンな方法はありますか?
まず、プラグインに依存関係を定義しましたか?さらに、 'mvn --fail-at-end ...'でMavenを呼び出すためにチェックしましたか? – khmarbaise
1これは同僚によって行われました。彼はその理由を持っていたと思う。私はおそらくそれらを削除することができます。 2:すべてのビルドで独自のmvnコマンドが実行されるため、おそらく-fail-at-endは機能しません。 --fail-neverはおそらく他の失敗も抑制するかもしれないので、おそらくそれほど良いものではありません。 – Ctwx
これらの依存関係をプラグインに追加することは実際には意味がありません。プラグインにはすでにそれらの依存関係があります。これらのビルドを実行するためにCIソリューションを使用していますか? yesの場合は、maven呼び出しの設定を変更できます。 – khmarbaise