Jenkins 2.5以降のDeclarative PipelineでCheckstyle PluginとFindBugs Pluginを使いたい

はじめに

Jenkins 2.5以降のDeclarative PipelineでCheckstyle PluginとFindBugs Pluginを使おうとしたら、やたら苦労したのでメモ。

環境

  • Jenkins ver. 2.60.3

したかったこと

  • Declarative Pipeline*1でPipelineを書く。
  • Maven で出力したCheckstyleとSpotbugsの結果をJenkinsに表示する。
  • parallelとか凝ったことはせず、シンプルにまずはやりたい。

Pipelineの書き方の例

mvnがBUILD FAILUREになっても後続が実行されるようにcatchErrorで囲みます。

pipeline {
//中略
    stage('checkstyle and spotbugs') {
        when {
          branch 'develop'
        }
        steps {
          catchError{
            sh 'mvn checkstyle:check spotbugs:check'
          }
          checkstyle canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', healthy: '', pattern: '', unHealthy: ''
          findbugs canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', pattern: '', unHealthy: ''
        }
    }
//中略
}

checkstyleおよびfindbugsプラグインは先に書いても結果を収集してくれるので、これでもいけます。

pipeline {
//中略
    stage('checkstyle and spotbugs') {
        when {
          branch 'develop'
        }
        steps {
          checkstyle canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', healthy: '', pattern: '', unHealthy: ''
          findbugs canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', pattern: '', unHealthy: ''
          sh 'mvn checkstyle:check spotbugs:check'
        }
    }
//中略
}

はまったこと

pluginの解説をみると全部のパラメータにoptionalと書いてあるが、省略するとpipeline実行時にエラーが発生する。

首記のとおりです。以下のリファレンスを読むと全部のパラメータにoptionalと書いてあるのに……。

リファレンスを見てもさっぱりわからないので、【Jenkins】Declarative Pipeline入門 - Qiita で解説されている「コードスニペットを自動で生成してくれる機能」を使用して生成したコードを貼りつけました。

Mavenの実行結果がBUILD FAILUREになると後続処理が実行されない

首記の仕様があるため、以下のように記述すると結果がJenkinsに表示ません。
mvn checkstyle:check、mvn spotbugs:checkともに指摘を検知するとBUILD FAILUREになりますものね。

//中略
        steps {
          sh 'mvn checkstyle:check'
          checkstyle canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', healthy: '', pattern: '', unHealthy: ''
          sh 'mvn spotbugs:check'
          findbugs canComputeNew: false, canRunOnFailed: true, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '', pattern: '', unHealthy: ''
        }
//中略

さいごに

苦労してpiplelineを書いたのですが、Checkstyle PluginとFindBugs PluginはDeprecatedです。
Warnings Next Generation Pluginが後継のpluginのようです。

余談ですが、最初、この名前みても後継のpluginであることが分からなかったです。
この記事書いている途中に復習していて気づいた。

*1:余談ですが、Scripted Pipelinesという別の書き方が存在することを知らず、「なんか書き方複数あるっぽい??」と混乱しながら調査してた