Symfony2プロジェクトをGitLabで管理してVagrantで立てたJenkinsでCIする(3)
第3回です。
- 前回のおさらい
- イテレーション A: Symfony2でプロジェクトをはじめる
Symfony2のプロジェクトをGitLabで管理し、PHPUnitを単体で実行できるようになりました。
- 今回の内容
- Phingビルドツールを導入し、PHPUnitをPhingから実行できるようにします。
いまどこ?
イテレーション 0: 準備タスク 0-1: 必要なソフトウェアをインストールするタスク 0-2: GitLabのアカウントを作成する
イテレーション A: Symfony2でプロジェクトをはじめる- イテレーション B: Phingでプロジェクトをビルドする ←いまココ!
- タスク B-1: Phingを導入する
- タスク B-2: PhingとPHPUnitを連携する
- イテレーション C: JenkinsをVagrantで構築する
- タスク C-1: VMを初期化する
- タスク C-2: 構築に必要なCookbooksを取得・作成する
- タスク C-3: Jenkinsを起動する
- イテレーション D: JenkinsでCIする
- タスク D-1: Jenkinsにプロジェクトを設定する
- タスク D-2: テストレポートを表示できるように設定する
- タスク D-3: コードカバレッジレポートを表示できるように設定する
- イテレーション E: 各種ツールの導入
- タスク E-1 PHPMDを導入する
- タスク E-2 PHPCSを導入する
イテレーション B: Phingでプロジェクトをビルドする
- Phingってなぁに?
PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant.
http://www.phing.info/
タスク B-1: Phingを導入する
- composerで依存関係を追加
C:\workspace\Symfony2>php composer.phar require phing/phing 2.5.* composer.json has been updated Loading composer repositories with package information (中略) Installing assets using the hard copy option Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework Installing assets for Acme\DemoBundle into web/bundles/acmedemo Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution
- 実行してみる
C:\workspace\Symfony2>bin\phing Buildfile: build.xml does not exist!
「build.xmlがない!」と怒られます。
タスク B-2: PhingとPHPUnitを連携する
- Phing用のbuild.xmlを作成
プロジェクトのルート(C:\workspace\Symfony2)に「build.xml」を作成します。
Gistでこんな素晴らしいものを発見したので、利用させてもらいます!
Phing build.xml for Symfony2 projects
ただし、phpmdとかphpcsとかphpdocとか、今は必要のないものが含まれているのでPHPUnitに絞ります。
結果、以下のような内容となりました。
<?xml version="1.0" encoding="UTF-8"?> <project name="Symfony2" basedir="." default="build:main"> <!-- Properties --> <property name="dir.app" value="${project.basedir}/app" /> <property name="dir.src" value="${project.basedir}/src" /> <property name="dir.bin" value="${project.basedir}/bin" /> <property name="dir.build" value="${project.basedir}/build" /> <property name="dir.reports" value="${dir.build}/logs" /> <property name="dir.reports.coverage" value="${dir.reports}/coverage" /> <!-- Filesets --> <fileset id="sourcecode" dir="${dir.src}"> <include name="**/*.php" /> </fileset> <!-- Default target --> <target name="build:main" depends="build:clean, build:prepare, build:test" description="Run all test and build everything" /> <!-- Test target --> <target name="build:test" depends="test:unit" description="Executes all tests.." /> <!-- Project build clean --> <target name="build:clean" description="Clean up build directories."> <echo msg="Cleaning build directories ..." /> <delete dir="${dir.build}" verbose="true" /> </target> <!-- Project build prepare --> <target name="build:prepare" description="Create build directories."> <echo msg="Creating build directories ..." /> <mkdir dir="${dir.build}" /> <mkdir dir="${dir.reports}" /> <mkdir dir="${dir.reports.coverage}" /> </target> <!-- Unit tests --> <target name="test:unit" description="Executes unit tests."> <echo msg="Running unit tests ..." /> <exec command="${dir.bin}/phpunit --log-junit ${dir.reports}/phpunit.xml --coverage-clover ${dir.reports.coverage}/clover.xml --coverage-html ${dir.reports.coverage}/ -c ${dir.app}"/> </target> </project>
オリジナルのものからの変更点として、${dir.bin}プロパティを定義してphpunitコマンド呼出し時に利用しています、くらいです。
- 実行してみる。
C:\workspace\Symfony2>bin\phing -logger phing.listener.DefaultLogger Buildfile: C:\workspace\Symfony2\build.xml Symfony2 > build:clean: [echo] Cleaning build directories ... [delete] Directory C:\workspace\Symfony2\build does not exist or is not a directory. Symfony2 > build:prepare: [echo] Creating build directories ... [mkdir] Created dir: C:\workspace\Symfony2\build [mkdir] Created dir: C:\workspace\Symfony2\build\logs [mkdir] Created dir: C:\workspace\Symfony2\build\logs\coverage Symfony2 > test:unit: [echo] Running unit tests ... Symfony2 > build:test: Symfony2 > build:main: BUILD FINISHED Total time: 1.9367 second
「-logger phing.listener.DefaultLogger」はANSIカラーシーケンスを出力しないようにするためにつけています。(コマンドプロンプトだとシーケンスがそのまま表示されてしまうので)
buildディレクトリ配下にテストの結果、カバレッジレポート等が出力されます。
確認として、HTML形式のカバレッジレポート「build\logs\coverage\index.html」を閲覧してみます。
以下のようになっていればOKです。
最後に
- composer.json
- composer.lock
がPhingの追加によって変更されています。
そして、
を新たに作成しました。
コミットして、GitLabへプッシュして(ry
以上です。