2017-12-06 25 views
0

私は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を設定しましたが、最後にビルドに失敗することはできません。私はどこかでステータスをチェックしてエラーを呼び出す必要があると思う。

これを達成するためのクリーンな方法はありますか?

+0

まず、プラグインに依存関係を定義しましたか?さらに、 'mvn --fail-at-end ...'でMavenを呼び出すためにチェックしましたか? – khmarbaise

+0

1これは同僚によって行われました。彼はその理由を持っていたと思う。私はおそらくそれらを削除することができます。 2:すべてのビルドで独自のmvnコマンドが実行されるため、おそらく-fail-at-endは機能しません。 --fail-neverはおそらく他の失敗も抑制するかもしれないので、おそらくそれほど良いものではありません。 – Ctwx

+1

これらの依存関係をプラグインに追加することは実際には意味がありません。プラグインにはすでにそれらの依存関係があります。これらのビルドを実行するためにCIソリューションを使用していますか? yesの場合は、maven呼び出しの設定を変更できます。 – khmarbaise

答えて

1

checkの代わりにpmdという目標を使用すると、コードを分析してレポートを生成できますが、ビルドに失敗することはありません。次に、JenkinのPMD PluginStatic Code Analysis Pluginを構成して、レポート内の違反の数に応じてビルドを失敗または不安定としてマークします。

ゴールを変更すると、Mavenビルドが手動で実行されなくなることもなくなります。私たちは通常、<executions>のない<pluginManagement>にmaven-pmd-pluginを設定し、目標checkとプロファイルjenkins、目標pmdのmaven-pmd-pluginを実行するデフォルトのプロファイルを作成します。これにより、開発者はビルドを手動で実行でき、PMD違反がある場合は失敗し、jenkinsというプロファイルのJenkinsで実行すると失敗しません。

関連する問題