DevOpsとか自動化とかアジャイルな話 / 認定スクラムプロフェショナル(CSP) / CSM / CSPO / Microsoft MVP for Visual Studio ALM / @ryuzee

CakePHPアプリをHudsonで継続的インテグレーションする方法

2010/10/18 | Agile | タグ: , , , ,


 

この記事はCakePHP1.2系またら1.3系を対象としており、CakePHP2.0系では別のアプローチになります。

不思議なことにCakePHPアプリの開発でHudson使って継続的インテグレーションしている事例をほとんど見たことがないんだけど、個人的にはPHPアプリだって全部HudsonでCIすべきと思っているのでやってみた。
(ちなみに最近までphpUnderControlでCIしていた)

概略

CakePHPアプリでCIやろうとして問題になるのは、

  • CakePHPでのテストライブラリがSimpleTestでありJUnit互換のテスト結果を出力できないこと
  • さらにSimpleTestでは一応XMLでの結果出力ができるのに、CakePHPのreporterにcake_xml_reporterとかが無くて、html出力かテキスト出力しかできない

という2点にあるので、この2点をクリアする方法を考えれば良い。
CakePHPのreporterを自作して、xsltでXMLをJUnit互換にしても良いが、今回偶然にもStagehand_TestRunnerという素晴らしいライブラリを見つけたので、そいつを使うことにする。

Stagehand_Testrunnerって何?

Stagehand_TestRunnerはテスト駆動開発者のためのテストランナーを提供しており、以下のような特徴がある。(上記サイトより引用)

  • 指定されたディレクトリに含まれるテストの実行
  • 指定されたファイルに含まれるテストの実行
  • 指定されたファイルの指定されたテストのみの実行
  • 指定されたクラスのテストのみの実行
  • テスト結果の色付け
  • 指定された PHP スクリプトのテスト実行前のプリロード
  • 指定されたディレクトリの変更の監視および変更検出時のテストの実行
  • Growl へのテスト結果の通知
  • JUnit XML フォーマットによる、指定されたファイルへのテスト結果のロギング
  • 詳細な進捗リポートの出力
  • 最初の失敗またはエラーの際の停止
  • テストファイルのサフィックスの指定
  • PHPUnit, SimpleTest, CakePHP, PHPT, PHPSpec のサポート

このツールを使うことで、PHPUnitでもSimpleTestでもCakePHPでもほぼ同様のインターフェイスでテストを実行できるようになる優れものである。

で、Hudson + CakePHP

Stagehand_TestRunnerを使うことで問題はクリアできるので、あとは実際にインストール&設定の手順を書く。

Stagehand_TestRunnerのインストール

pear channel-discover pear.piece-framework.com
pear install piece/stagehand_testrunner

Hudson側の準備

「PHPでもHudsonを使うべし」を参照して、Hudsonの設定をする。必要になってくるのは以下のもの

  • phingの導入 (pearコマンドから)
  • phingプラグインの導入 (Hudsonの管理画面から)
  • xUnitプラグインの導入 (Hudsonの管理画面から)

phingのビルド設定

build.xmlには以下のように追記する。

  <target name="test"> 
   <exec command="cakerunner --cakephp-app-path /path/to/source/app --log-junit=/path/to/reports/unittest.xml -R /path/to/source/app/tests/cases/" /> 
 </target>

Hudsonの設定

プロジェクトの設定画面において、ビルド手順の設定でphingの操作を設定

さらに出力したユニットテスト結果の取り込みのためにxunitの取り込み設定を行う(「JUnitテスト結果の集計」でレポートのパスを設定してもうまくいかない。たぶん処理の順番かと。)

※レポートの種別は何でもよいと思うが、PHPUnitレポートからの変換を選択しておく。

以上で完了だ

最後に

CakePHPアプリケーションをHudsonでCIする方法は海外を探してもあんまり情報が出てこなかったけど、現状はこれが一番楽な方法だと思う。本当はCakePHPのTestRunnerがもうちょっと改善されれば良いんだけどね。

ということで、CIライフをお楽しみください。

タグ: , , , ,

    

参考文献

リーン開発の現場 カンバンによる大規模プロジェクトの運営

著者/訳者:Henrik Kniberg

出版社:オーム社( 2013-10-26 )

定価:¥ 2,520

Amazon価格:¥ 2,520

単行本(ソフトカバー) ( 184 ページ )

ISBN-10 : 427406932X

ISBN-13 : 9784274069321



組織パターン (Object Oriented SELECTION)

著者/訳者:James O. Coplien Neil B.Harrison ジェームス・コプリエン ニール・ハリソン

出版社:翔泳社( 2013-08-06 )

定価:¥ 3,990

Amazon価格:¥ 3,990

大型本 ( 424 ページ )

ISBN-10 : 4798128449

ISBN-13 : 9784798128443



インフラエンジニアの教科書

著者/訳者:佐野 裕

出版社:シーアンドアール研究所( 2013-10-26 )

定価:¥ 2,100

Amazon価格:¥ 2,100

単行本(ソフトカバー) ( 184 ページ )

ISBN-10 : 4863541333

ISBN-13 : 9784863541337



継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

著者/訳者:David Farley Jez Humble

出版社:アスキー・メディアワークス( 2012-03-14 )

定価:¥ 3,990

Amazon価格:¥ 3,990

大型本 ( 544 ページ )

ISBN-10 : 4048707876

ISBN-13 : 9784048707879


コメント

12 Responses to “CakePHPアプリをHudsonで継続的インテグレーションする方法”

  1. bb_auto より:

    [h] CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com http://bit.ly/9qS5xl

  2. CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com http://dlvr.it/78vzb

  3. cakephper より:

    RT @cakephp_jp: CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com 不思議なことにCakeP — http://bit.ly/9gDVUJ #cakephp

  4. しょうゆ より:

    RT @cakephp_jp: CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com 不思議なことにCakeP — http://bit.ly/9gDVUJ #cakephp

  5. junichi_y より:

    CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com: http://bit.ly/cNpHiu

  6. suzuki より:

    RT @ryuzee: ブログ書いた CakePHPアプリをHudsonで継続的インテグレーションする方法 http://tinyurl.com/239g9s6

  7. deeeki より:

    CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com http://htn.to/pQMYEH

  8. Graham Weldon より:

    CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com http://htn.to/kr3QrG (via @slywalker)

  9. CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com http://htn.to/PqNMx5

  10. hidehish より:

    見てる: 『CakePHPアプリをHudsonで継続的インテグレーションする方法 | Ryuzee.com』 http://www.ryuzee.com/contents/blog/3473

  11. [...] 下記サイトを参考にさせてもらってます。(大変助かっております) http://www.ryuzee.com/contents/blog/3473 [...]