PHP 入門
はじめに
TeamCity は、多くのテクノロジーで継続的インテグレーション (CI) プロセスをサポートします。 このチュートリアルでは、PHP プロジェクトの継続的インテグレーション (CI) プロセスを構成します。 CI を提供するサンプルプロジェクトとして、オープンソースの PHP プロジェクト PHPExcel(英語) を使用します。 このプロジェクトには大量のコードが含まれており、PHPUnit はテストを行い、Phing を使用してビルドアーティファクトを作成します。 TeamCity を使用してビルドプロセスを自動化し、GitHub のソースコードが変更されたらすぐにフィードバックを受け取れるようにします。
このチュートリアルは、PEAR、PHPUnit、Phing がインストールされた PHP 環境がすでにあることを前提としています。 そうでない場合は、今がその時です。 PHP 環境の構成の詳細については、 このブログ投稿を参照してください(英語)。
プロジェクトのセットアップ
まず、TeamCity で新しいプロジェクトとビルド構成を作成します。 PHPExcel は現在 1.7.6.x バージョンの範囲にあるため、この新しいビルド構成のビルド番号は 1.7.6.{0} になります。
PHPExcel には ビルド/release/* ディレクトリの下にビルドアーティファクトを作成するビルドスクリプトが含まれているため、そのパスを TeamCity が監視するアーティファクトパスとしてすでに追加できます。

PHPExcel プロジェクトには GitHub リポジトリがあり、その URL はバージョン管理システム (VCS) 設定で構成できます。

ビルドステップの追加
ビルド構成は、ビルド中に必要なアクションを実行するいくつかのビルドステップで構成されています。
ユニットテスト
PHP はインタープリター型言語のため、コンパイルステップは不要で、すぐにユニットテストから始められます。ソースコードが変更されるたびに、すべてのテストが成功していることを確認します。 失敗したユニットテストがある場合は常に、ビルド全体を失敗させ、ビルドアーティファクトを提供しないようにします。 TeamCity には Java および .NET 用の事前定義済みビルドステップが多数用意されていますが、PHP を使用しているため、コマンドラインビルドランナーを選択する必要があります。

PHPExcel のソースコードで提供されている PHPUnit 設定を実行したいです。 これを呼び出すには、次のコマンドラインスクリプトを使用します。
デフォルトでは、TeamCity は PHPUnit が提供するテスト結果をインポートします。 ただし、リアルタイムのテスト結果を TeamCity に報告することもできるため、ビルド実行が完了する前でも、実行中に結果を確認できます。 ビルド結果を報告するために、 サービスメッセージを使用する PHPUnit のラッパーを使用します。 ラッパーをビルドエージェント上のどこかに配置するか、ビルドエージェントが別の VCS ルートを使用して上記の GitHub リポジトリから直接ダウンロードするようにします。

ビルド構成はすでに呼び出すことができ、ユニットテストの結果が表示されるはずです。 ただし、まだ完了ではありません。さらにいくつかのビルドステップを追加します。
Phing の実行
次のビルドステップでは、Apache Ant に基づく PHP プロジェクトビルドシステムまたはビルドツールである Phing(英語) を呼び出します。 PHPExcel には、すべてのユニットテストに合格した後に呼び出す Phing ビルドスクリプトが付属しています。 Phing のコマンドラインツールを使用していくつかのパラメーターを渡す新しいコマンドラインビルドステップを追加してみましょう。
PHPExcel には 4 つのビルドターゲット (リリース標準、 リリース \- ドキュメント、 リリース \-pear、 リリース _phar) が定義されており、それぞれ異なるビルドアーティファクトを提供します。 コマンドラインで指定した release\-standard ターゲットは、すべてのソースコードと phpDocumentor 出力を含む ZIP ファイルを生成する PHPExcel のデフォルトビルドです。
また、Phing の -D コマンドラインスイッチを使用して、TeamCity から現在のビルド番号を Phing に渡します。 ビルドスクリプトはこれらを使用して正しいファイル名を作成できます。
ビルドプロジェクトの作成中にアーティファクトパスを設定していない場合は、ここで設定するのが最善です(プロジェクトの設定を参照)。 このビルドスクリプトで生成された ZIP ファイルが TeamCity のウェブインターフェースから利用できることを確認します。
別のビルドを実行すると、単体テストが実行され、その後 Phing ビルドスクリプトが実行されることがわかります。 ビルド全体が完了すると、Phing ビルドスクリプトによって生成された ZIP ファイルがダウンロード可能なビルドアーティファクトとして見つかります。

コードカバレッジ
作成した最初のビルドステップは、PHPUnit を使用してユニットテストを実行することでした。 PHPUnit のいいところは、コードカバレッジ情報も HTML レポートとしてうまくフォーマットできることです。 TeamCity はビルド結果のカスタムタブに HTML レポートを表示できます。
まず、コードカバレッジが有効になっていることを確認しましょう。 最初のビルドステップ(PHPUnit を実行している)を編集し、PHPUnit を設定するために PHPExcel の phpunit-cc.xml 設定ファイルを使用するようにしてください。 PHPExcel 固有のこの設定ファイルは、 unitTests/codeCoverage フォルダーにコードカバレッジレポートを出力します。 生成されたすべてのファイルをビルドアーティファクトとして TeamCity に追加することもできますが、そのフォルダー全体を ZIP 化して、単一のファイルとして利用できるようにする方がすっきりします。 特別なアーティファクトパスパターンを使用すると、TeamCity にこの ZIP ファイルを作成させることができます! ビルドアーティファクトを再度編集して、以下の 2 つのアーティファクトパスが指定されていることを確認してください。
TeamCity で unitTests/codeCoverage パスから ZIP アーカイブを作成するには、 => を使用してターゲットアーティファクトのお名前を指定するだけです。
もう一度ビルドを実行してください。 完了すると、 アーティファクトタブには、作成した coverage.zip ファイルが含まれているはずです。 その隣に、コードカバレッジ結果を表示する追加の コードカバレッジタブがあります。 コードカバレッジのレポートに TeamCity の規則、つまり coverage.zip ビルドアーティファクトの作成を使用しているため、TeamCity はカバレッジ結果を新しいレポートタブに自動的に表示します。


ビルドレポートを追加して、PHP 混乱ディテクター PHPLint(英語) からの結果を表示したり、ビルドアーティファクトからの情報に基づいてカスタムレポートタブを作成することで phpDocumentor(英語) のコンテンツを表示するタブを利用したりすることもできます。
ビルド結果を詳しく見る
TeamCity を使用すると、ビルド履歴、VCS 履歴、コミットなどを表示できます。 成功率、ビルド期間、テスト数などの一般的なビルド統計がグラフィカル形式であります。
PhpStorm や WebStorm などの IntelliJ Platform ベースの環境で作業している場合、TeamCity と IDE を簡単にリンクできます。 TeamCity プラグインを IDE にインストールすると、TeamCity 内から IDE でユニットテストを開くなど、便利なちょっとした機能があることに気付くでしょう:

このチュートリアルで見たように、PHP 用のビルドを実行して PHP プロジェクトに継続的インテグレーションを提供するのは非常に簡単です。
ハッピービルド !