【Jenkins】GradleでCheckstyleを導入する
GradleをビルドツールとするJavaソースに対して、Jenkinsの環境構築を行っています。その中で静的解析ツール CheckStyle の設定について行ったので、ここにメモを残します。
実施した時の環境は記載しますが、Jenkinsのインストールや基本操作はここでは触れないため、ご注意ください。また、Jenkins、プラグイン、ツールのバージョンによって表示が変わるかもしれませんが、そこはご了承ください。
環境
項目 バージョン Jenkins 2.332.1 OpenJDK 1.8.0_322 Gradle 7.4.1 Checkstyle 8.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のバージョンを確認してください。
以下で対応するバージョンが記載されています。
checkstyle – Checkstyle 10.3 https://checkstyle.org/index.html#Backport
成功していそうだがエラーが発生する
私が一番引っかかったエラーです。以下のようにビルドが失敗したように出力されます。この出力の前にはうまく実行できているように見えます。
これの原因は「警告時にビルドが失敗すること」です。そのため、これを上記で記載した「build.gradle」で「ignoreFailures = true」を追記します。
参考
- The Checkstyle Plugin | Gradle
https://docs.gradle.org/7.4.1/userguide/checkstyle_plugin.html#checkstyle_plugin - 【SpringBoot】CheckStyleをGradleを使って導入する
https://developers-book.com/2021/01/30/507/ - Stacktrace option for Gradle task in Eclipse - Stack Overflow
https://stackoverflow.com/questions/54287496/stacktrace-option-for-gradle-task-in-eclipse