IntelliJさんのinsupectionはCI環境でも実行できるので、Jenkinsで実行&いい感じに結果を表示する方法を調べてみた。 *1
Jenkinsに必要なプラグイン
- Warnings Plugin - Jenkins - Jenkins Wiki
- IntelliJさんのinspectionの結果をいい感じに集計&表示するために必要になります。
ビルドにinspectionの実行を定義する
inspectionの実行と、inspection実行結果のファイル内のパス置き換えを行ってあげます。
実行結果ファイルのパス書き換えをしないと、指摘箇所のソースへのジャンプ時にエラーになってしまいます。
/var/jenkins_home/idea-IC-163.9166.29/bin/inspect.sh . /var/jenkins_home/my_inspection.xml ./report/inspection -d src/main/java sed -i 's/file:\/\/\$PROJECT_DIR\$\///' ./report/inspection/*.xml
IntelliJのプラグインをCIサーバに配置する
サードパーティ製のプラグインのInspection機能をCIサーバで実行したい場合には、プラグインをCIサーバ上にインストールする必要があります。
インストール先は、$idea.config.path/pluginsとなります。
ビルド後の手順にinspection結果の集計を追加する
下の画層のようにWarnings Pluginを使って結果の集計を行います。
集計するファイルにはinspection実行結果のファイルを指定して、パーサにはIntelliJ IDEA Inspectionsを選択します。
ハマりポイント
CI環境にIntelliJさんのjdk設定が必要
具体的には、$idea.config.path/options/jdk.table.xmlが必要となります。
この設定がないと、下のようなメッセージがでてinspectionの実行がエラーとなってしまいます。
(他のパターンもあって、下と同じようにJDKの設定がないよ的なエラーがでます)
Please, specify sdk 'null' for module 'inspection_test_pj_main'
デスクトップ環境があれば、IntelliJを起動して、JDKの設定をしてあげるだけでOKです。
もし、デスクトップ環境がない場合には、別の環境で作ったファイルをCIの該当ディレクトリに移動する必要があります。
Warnnings pluginがエラーをはいておわってしまう
こんな感じのエラーをはいて異常終了してしまうことがあります。
これは、inspectionの結果ファイルに行数を示す要素がない場合に発生します。
例えば、パッケージ名やモジュールに対するinspection結果にはこの要素がないためエラーとなってしまいます。
エラーとなった結果ファイルは、例えばgrep -L line report/inspection/*.xmlで検索できます。
これらの結果を除外したい場合は、inspect.sh(bat)実行後に、grep -L line report/inspection/*.xml | xargs rm -rfを実行して削除してあげれば良いと思います。
ERROR: Build step failed with exception java.lang.NumberFormatException: For input string: "-" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:572) at java.lang.Integer.parseInt(Integer.java:615) at hudson.plugins.warnings.parser.IdeaInspectionParser.parseProblems(IdeaInspectionParser.java:69)
おわり。