Jenkins で 静的コードチェックを自動化する MetricFu, RuboCop, Brakeman

ソースコードの品質向上のため静的コード解析ツールである MetricFu , RuboCop , Brakeman のドキュメント出力を Jenkins で自動化する方法をまとめました。
これらを導入することにより人力コードレビューの負担を少しでも減らすことができるかなと思います。

MetricFu

metricfu/metric_fu · GitHub

コードメトリクスを測定。 ソースコードの重複チェック、処理の複雑度などを出力してくれる。
Reek, Flay, Chrn, Stats, Flog, Cane, Roodi, Saikuro, Rails Best Practices, Hotspots

RuboCop

bbatsov/rubocop · GitHub

静的コード解析ツール。
Ruby Style Guide に沿っているかチェックしてくれる。

Brakeman

presidentbeef/brakeman · GitHub

セキュリティチェック。
脆弱性の含まれたライブラリを使っていたり、セキュリティ的にまずい実装をしていると警告してくれる。

MetricFu

gem のインストール

# Gemfile

gem 'metric_fu'

Jenkins の設定

プラグインのインストール

[Jenkinsの管理] > [プラグインの管理] から HTML Publisher Plugin プラグインをインストールする。

HTML Publisher Plugin プラグイン の設定

[ビルド後の処理の追加] > [Publish HTML reports] を選択し以下のように入力する。

f:id:kzy52:20150126224437p:plain

HTML directory to archive: tmp/metric_fu/output
Index page[s]: index.html
Report title: metric-fu

シェルスクリプトの設定

bundle exec metric_fu

f:id:kzy52:20150128221618p:plain

f:id:kzy52:20150128221447p:plain

RuboCop

gem のインストール

# Gemfile

gem 'rubocop', require: false
gem 'rubocop-checkstyle_formatter', require: false

Jenkins の設定

プラグインのインストール

[Jenkinsの管理] > [プラグインの管理] から Violations プラグインをインストールする

Violations プラグインの設定

[ビルド後の処理の追加] > [Report Violations] を選択し以下のように入力する。

f:id:kzy52:20150126225100p:plain

checkstyle: tmp/checkstyle.xml

シェルスクリプトの設定

bundle exec rubocop --require rubocop/formatter/checkstyle_formatter --format RuboCop::Formatter::CheckstyleFormatter --no-color --rails --out tmp/checkstyle.xml

f:id:kzy52:20150128222030p:plain

f:id:kzy52:20150128222104p:plain

Brakeman

gem のインストール

# Gemfile

gem 'brakeman'

Jenkins の設定

プラグインのインストール

[Jenkinsの管理] > [プラグインの管理] から Brakeman Plugin プラグインをインストールする。

Brakeman Plugin プラグインの設定

[ビルド後の処理の追加] > [Publish Brakeman warnings] を選択し以下のように入力する。

f:id:kzy52:20150126225556p:plain

Brakeman Output File: tmp/brakeman-output.tabs

シェルスクリプトの設定

bundle exec brakeman -o tmp/brakeman-output.tabs

f:id:kzy52:20150129204124p:plain

f:id:kzy52:20150129204137p:plain

f:id:kzy52:20150129204314p:plain

気に入ったものがあれば是非導入してみてください。