jenkinsでCheckstyle pluginを利用して、FuelPHPのコーディング規約をチェックする

jenkinsでCheckstyle pluginを利用して、CakePHPのコーディング規約をチェックするのFuelPHP版

FuelPHPのコーディング規約をjenkinsで継続的にチェックできるような環境を構築する。

開発環境は上記より、以下のライブラリ・プラグインはインストールされている前提で話を進める。

  • PEARの「PHP_CodeSniffer」
  • Jenkinsの「Checkstyle Plug-in」

1. FuelPHP用のコード規約をインストール

https://github.com/eviweb/fuelphp-phpcs

今回はeviwebさんが開発された、fuelphp-phpcsを利用させていただく。
(インストール方法は、README.mdに記載されている)

$ git clone https://github.com/eviweb/fuelphp-phpcs.git
$ ./fuelphp-phpcs cd fuelphp-phpcs

ダウンロードした中にinstall.shが存在していてこれを叩けばインストールできるのだけど、このインストール方法だと、対象のディレクトリ(ここでいうところのFuelPHP)が、コーディング規約が格納されるディレクトリ(/usr/share/pear/PHP/CodeSniffer)に移動されるわけではなく、シンボリックリンクで設置されるだけになってしまう。
こうなると、権限によってはコンソール上では動作させることができるのだけど、webからアクセスした場合にそのコーディング規約を読み込まないということも起きてしまうのでここは実体を対象のディレクトリに移動させる。
(これで無駄にハマった。。)

$ mv  fuelphp-phpcs/Standards/FuelPHP/ /usr/share/pear/PHP/CodeSniffer/Standards/

うまくインストールできているか確認。

$ phpcs -i
The installed coding standards are Squiz, FuelPHP, PHPCS, MySource, PEAR, Zend and CakePHP

2. PHP_CodeSnifferの動作の確認

PHP_CodeSnifferの動作確認。対象は/fuel/app以下

$ phpcs --report=summary --report=checkstyle --report-checkstyle=phpcs.xml --standard=FuelPHP --extensions=php fuel/app

PHP CODE SNIFFER REPORT SUMMARY
--------------------------------------------------------------------------------
FILE ERRORS WARNINGS
--------------------------------------------------------------------------------
...lib/jenkins/jobs/hogehoge/workspace/fuel/app/bootstrap.php 4 0
...s/hogehoge/workspace/fuel/app/classes/view/welcome/404.php 1 0
...jenkins/jobs/hogehoge/workspace/fuel/app/config/config.php 8 0
...lib/jenkins/jobs/hogehoge/workspace/fuel/app/config/db.php 1 0
...jobs/hogehoge/workspace/fuel/app/config/development/db.php 8 0
...jenkins/jobs/hogehoge/workspace/fuel/app/config/parser.php 4 0
.../jobs/hogehoge/workspace/fuel/app/config/production/db.php 8 0
...jenkins/jobs/hogehoge/workspace/fuel/app/config/routes.php 5 0
...ins/jobs/hogehoge/workspace/fuel/app/config/staging/db.php 8 0
...enkins/jobs/hogehoge/workspace/fuel/app/config/test/db.php 8 0
.../jenkins/jobs/hogehoge/workspace/fuel/app/tasks/robots.php 13 0
...kins/jobs/hogehoge/workspace/fuel/app/vendor/view/view.php 15 0
--------------------------------------------------------------------------------
A TOTAL OF 83 ERROR(S) AND 0 WARNING(S) WERE FOUND IN 12 FILE(S)
--------------------------------------------------------------------------------

Time: 0 seconds, Memory: 7.50Mb

phpcs.xmlが生成されているので、これで動作自体の確認はOK

3. Jenkinsのビルド処理と連携させてみる

2.で試したシェルを直接ビルド手順に取り込んでも問題ないが、以前CakePHPで試した時と同じくPhingを利用してビルドファイルで実行させてみる。

具体的には、以下のようなビルドファイルを/build/以下に設置。

<!-- build/build.xml -->
<?xml version="1.0" encoding="utf-8" ?>
<project name= "FuelPHPBuildFile" default= "main">

  <!-- property -->
  <property name="basedir"     value="./" />
  <property name="reportdir"   value="${basedir}/reports" />
  <property name="apppath"     value="${basedir}/fuel/app" />

  <!-- dispatch targer -->
  <target name="main" depends= "init,phpcs"></target>

  <!-- init -->
  <target name="init" >
    <delete dir="${reportdir}" includeemptydirs= "true" />
    <mkdir dir="${reportdir}" />

    <chmod file="${apppath}/cache/" mode= "0777" verbose= "true" />
    <chmod file="${apppath}/logs/" mode= "0777" verbose= "true" />
    <chmod file="${apppath}/tmp/" mode= "0777" verbose= "true" />
    <chmod file="${apppath}/config/" mode= "0777" verbose= "true" />
  </target>

  <!-- checksytle -->
  <target name="phpcs" description= "Generate phpcs.xml using PHP_CodeSniffer" >
    <phpcodesniffer
      standard="FuelPHP"
      file="${apppath}/"
      allowedFileExtensions="php" >
      <formatter type="checkstyle" outfile="${reportdir}/phpcs.xml"/>
    </phpcodesniffer>
  </target>
</project>

で、jenkinsで作成したプロジェクトの設定画面から、phingを利用して以下のように登録する。

上記設定後、ビルドを実行させる。

ビルドが成功すると上記のような結果を表示。
これでコーディング規約チェックの環境が整った。