【Jenkins】GradleでCheckstyleを導入する

GradleをビルドツールとするJavaソースに対して、Jenkinsの環境構築を行っています。その中で静的解析ツール CheckStyle の設定について行ったので、ここにメモを残します。

実施した時の環境は記載しますが、Jenkinsのインストールや基本操作はここでは触れないため、ご注意ください。また、Jenkins、プラグイン、ツールのバージョンによって表示が変わるかもしれませんが、そこはご了承ください。

環境

項目バージョン
Jenkins2.332.1
OpenJDK1.8.0_322
Gradle7.4.1
Checkstyle8.45.1

Jenkinsのジョブ設定でGitなどのソースコード管理ツールから取得できることを前提とします。

GradleでCheckStyleを導入する

以下のURLでダウンロードできるCheckStyleの定義ファイルをダウンロードします。命名規則等の設定がXML形式で定義されたファイルです。
https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/sun_checks.xml

ダウンロードしたファイルを「config/checkstyle/checkstyle.xml」に保存します。プロジェクトのフォルダ構成は、一部抜粋ですが以下のようなイメージです。configフォルダやcheckstyleフォルダがない場合は作成してください。

├─build
├─config
│  └─checkstyle
│      └─checkstyle.xml
├─src
└─build.gradle

次にビルドを定義する設定ファイル build.gradle に以下を記載します。

plugins {
    id 'java'
    id 'checkstyle'   //追記 
}

//以下をすべて追記 
checkstyle {
    toolVersion = "8.45.1"
    configFile = rootProject.file('config/checkstyle/checkstyle.xml')
    ignoreFailures = true
}

CheckStyleのバージョン(toolVersion)や上で保存した設定ファイル(configFile)を設定します。

また、JenkinsでのビルドでCheckStyleが正常に実行できているにも関わらず、エラーが発生し失敗することがあります。そこでビルド実行を続行させるために、「ignoreFailures」をtrueにします。詳細は、以下のドキュメントを確認してください。
https://docs.gradle.org/7.4.1/dsl/org.gradle.api.plugins.quality.CheckstyleExtension.html

JenkinsでCheckStyleのビルドタスクを実行する

それではJenkinsの設定に入ります。

CheckStyleを行うビルドタスクを1つ追加します。[ビルド]の[ビルド手順の追加]から[Invoke Gradle script]を選択します。

次に表示された入力項目で、設定以下のように「check」を入力します。これでビルドタスクの追加は以上です。

では設定を保存してビルド実行を行ってください。すると以下のようにワークスペースで「build/reports/checkstyle/」にhtmlやxmlが表示されます。失敗する場合やファイルが作成されない場合は下に記載する「エラーが出る場合」を参考にしてください。

JenkinsでCheckStyleの結果を表示する

次に出力できたCheckStyleの実行結果を表示する設定を行います。

JenkinsにCheckStyleを解析するためのプラグインをインストールしていない場合は、[Jenkinsの管理] > [プラグインの管理] > [利用可能タブ]の検索で「warnings」と入力し、「Warnings Next Generation」を選択してからインストールしてください。昔はCheckStyle用のプラグインがあったのですが、廃止になりました。

さてジョブの設定ですが、まず[ビルド後の処理追加]から [Record compiler warning and analysis results] を選択します。

あとは自分のソースに合わせて設定を変更します。

項目説明設定値
Tool解析ツールの選択CheckStyle
Report File Pattern実行結果ファイルのパス(設定値がワークスペースに表示されているパスに合わせてください)build/test-results/test/*.xml

これで設定は完了です。ビルド実行を行い、以下のように結果を表示することができたら問題ありません。

エラーが出る場合

ジョブの実行でエラーが出る場合は具体的に何が原因かを見てあげましょう。以下のように、ジョブの設定でビルドタスクを入力します。

check --stacktrace

ソース側で定義する場合は、build.gradleで以下を追加してください。

gradle.startParameter.showStacktrace = org.gradle.api.logging.configuration.ShowStacktrace.ALWAYS

上記のどちらかを設定すれば、Jenkinsのコンソールにエラーの原因が表示されます。

以下に私が引っかかったエラーと対処について記載します。参考にしてください。

バージョンが異なるようなエラーが発生する

以下のようにバージョンが異なるようなエラーが発生するパターンです。

この原因は「JREのバージョンと使用できるCheckStyleのバージョンに食い違いがあること」です。Jenkinsを実行しているJavaのバージョンと、「build.gradle」の「toolVersion」に記載したCheckStyleのバージョンを確認してください。

以下で対応するバージョンが記載されています。
checkstyleCheckstyle 10.3 https://checkstyle.org/index.html#Backport

成功していそうだがエラーが発生する

私が一番引っかかったエラーです。以下のようにビルドが失敗したように出力されます。この出力の前にはうまく実行できているように見えます。

これの原因は「警告時にビルドが失敗すること」です。そのため、これを上記で記載した「build.gradle」で「ignoreFailures = true」を追記します。

参考