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という別の書き方が存在することを知らず、「なんか書き方複数あるっぽい??」と混乱しながら調査してた