Any Any

いつでもどこでも、何でもかんでも。

JenkinsでPythonを静的解析(flake8)

flake8を使って、Pythonのコードを静的解析してみる。
Jenkinsを使ってコミット時に実行するようにすれば、すぐに気づけてお得( ̄ー ̄)

準備

pipのインストール

flake8をインストールする為に、まずはpipのインストール。
どうやらいつの間にかpipのインストールが楽になってたようです。

$ curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

flake8をインストール

pipが入っていれば簡単。

$ pip install flake8

Jenkinsのジョブを作成

以下のジョブを作成する。

$ flake8 .

結果

エラーがある場合

flake8でエラーが出る場合は、「ビルド失敗」と判定される。

Started by user anonymous
Building in workspace /var/lib/jenkins/jobs/Flake8 test/workspace
Cleaning local Directory .
Checking out http://localhost:80/svn/trunk/python at revision '2014-10-31T01:09:51.748 +0900'
A         hello_world.py
At revision 11
[workspace] $ /bin/sh -xe /tmp/hudson838485310037875301.sh
+ flake8 .
./hello_world.py:3:1: E302 expected 2 blank lines, found 1
Build step 'Execute shell' marked build as failure
Finished: FAILURE

エラーが無い場合

一方、エラーが出ない場合=flake8 .の出力が無い場合は、「ビルド成功」と判定される。

Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/Flake8 test/workspace
Cleaning local Directory .
Checking out http://localhost:80/svn/trunk/python at revision '2014-10-31T01:13:05.095 +0900'
A         hello_world.py
At revision 12
no revision recorded for http://localhost:80/svn/trunk/python in the previous build
[workspace] $ /bin/sh -xe /tmp/hudson7270646181000268555.sh
+ flake8 .
Finished: SUCCESS

感想

すごく簡単。
コーディング規約はツールでのチェックを入れないと形骸化しそうなので、Jenkinsとの相性が良い。

ちなみに、ビルド成功/失敗の判定については、下記が参考になる。
Things you didn't know about Jenkins - Why does Jenkins think my build succeeded?