web-dev-qa-db-ja.com

PHPプロジェクトのデプロイメント/ビルド/ CIサイクルのセットアップ

私はほとんどの時間、孤独な開発者であり、多くの大きなPHPベースのプロジェクトに取り組んでいます。コードベースへの変更の処理方法を専門化し、自動化し、基本的な変更を行わずにチームで作業するための移行を可能にする継続的統合プロセスを作成します。

私が今していることは、すべてのプロジェクトにローカルなテスト環境があることです。各プロジェクトにSVNを使用しています。変更はローカルでテストされ、通常はFTP経由でオンラインバージョンに転送されます。 APIドキュメントは、ソースコードから手動で生成されます。ユニットテストは私がゆっくりと始めているものであり、それはまだ私の日常の一部ではありません。

私が想定している「ビルドサイクル」は次のようになります。

  • ローカルでテストされた後、変更セットはSVNにチェックインされます。

  • ビルドプロセスを開始します。 SVN HEADリビジョンはチェックアウトされ、必要に応じて変更され、アップロードの準備が整います。

  • APIドキュメントは自動的に生成されます-まだ詳細に設定していない場合、デフォルトのテンプレートを使用して、コードベース全体をスキャンします。

  • 新しいリビジョンは、FTPを介してリモートの場所に展開されます(ディレクトリ名の変更、chmodding、データベースのインポートなどが含まれます)。これは私がすでに気に入っているものです phing もちろん代替案について。

  • 定義済みの場所にある単体テストが実行されます。電子メール、RSS、または(できれば)HTML出力を使用してそれらの失敗または成功について通知され、それらを取得してWebページに入れることができます。

  • (オプション)事前定義された場所にあるエンドユーザーの「変更ログ」テキストファイルは、コミットメッセージの事前定義された部分で更新されます(「同時に、「foo」と「bar」このメッセージは、SVNコミットメッセージと必ずしも同じではなく、おそらくはるかに多くの内部情報が含まれています。

  • コードメトリックス、コードスタイルチェックなどのようなものは、現在のところ私の主な焦点ではありませんが、長期的には確かにそうなります。このすぐに使用できるソリューションは非常に親切に検討されています。

を探しています

  • 同様の状況にある、または同様の状況にあった人々からのフィードバックと経験

  • 特に、適切なステップバイステップのチュートリアルとチュートリアルでこれを設定する方法

  • 可能な限り多くの自動化を提供するソリューション。たとえば、新しいプロジェクトごとにスケルトンAPI、テストケースなどを作成します。

そしてまた

  • 製品の推奨事項。私がこれまでに知っていることは、構築するための phing /antと、レポート部分のための phpUnderControl または Hudson です。私が見る限りそれらはすべて好きですが、もちろん彼らとの詳細な経験はありません。

私は仕事に圧倒されていますので、単純な解決策に強い傾向があります。一方、機能が欠落している場合は、機能が制限されすぎていると泣きます。 :)ポイントアンドクリックソリューションも歓迎します。また、PHPプロジェクトで使用できる商用製品の推奨事項にも従います。

私のセットアップ

私はローカルでWindows(正確には7)で作業しており、ほとんどのクライアントプロジェクトはLAMPスタック、多くの場合共有ホスティング(=リモートSSHなし)で実行されています。自分の環境で実行できるソリューションを探しています。 Linuxをセットアップする準備ができていますVMこれは問題ありません。ホストされたソリューションは、説明されているすべての側面を提供するか、他の部分と対話するのに十分な柔軟性がある場合にのみ興味深いですプロセスの。

バウンティマイレージが最大になると思う答えを受け入れています。ここには多くの優れた入力があります。複数の回答を受け入れたいと思います。みんな、ありがとう!

198
Pekka 웃

buildbotCruiseControl.netCruiseControl 、および Hudson を使用しました。私は本当にCruiseControl *が大好きでしたが、本当に複雑な依存関係の場合には面倒でした。 buildbotのセットアップは簡単ではありませんが、素晴らしいオーラがあります(私はpythonが好きです、それだけです)。しかし、ハドソンは前の3つを勝ち取りました。

  1. 設定は簡単です
  2. 簡単にカスタマイズできます
  3. それはよさそうだし、ニース概要機能を持っています
  4. それ自体とインストールされているすべてのプラグインに対して、ポイントアンドクリックの更新が行われました。これは本当にすてきな機能で、ますます感謝しています

警告:上記のビルドサーバーのベースとしてLinuxのみを使用しました(CC.netは mono で実行されていました)が、ドキュメントによると、すべてクロスプラットフォームで実行する必要があります。

Hudsonサーバーのセットアップ

前提条件:

  • Java(1.5で十分に機能します)
  • Subversionサーバーへの読み取りアクセス(hudsonユーザー用に別のアカウントを持っています)

ここからは、次のとおりです。

Java -jar hudson.war

これにより、コンソールから小さなサーバーインスタンスが実行されます。事前にそのポートで他に何も実行していない場合は、http://localhost:8080でインストールを参照できます(別のポートを指定するには、上記のコマンドに--httpPort=ANOTHER_HTTP_PORTオプションを渡す)と、すべてが「インストール」プロセスでうまくいきました。

使用可能なプラグインディレクトリ(http://localhost:8080/pluginManager/available)に移動すると、上記のタスクをサポートするためのプラグインが見つかります(Subversionサポートはデフォルトでインストールされます)。

食欲をそそる場合は、Java Tomcatjetty などのアプリケーションサーバーをインストールする必要があります。 インストール手順 はすべての主要なアプリケーションサーバーで利用可能です

UpdateKawasuke Kawaguchi は構築されました windows service installer for hudson

ハドソンでのプロジェクトのセットアップ

次のウォークスルーのリンクは、http://localhost:8080にあるhudsonの実行中のインスタンスを想定しています

  1. 左側のメニューから新しいジョブ(http://localhost:8080/view/All/newJob)を選択します
  2. ジョブに名前を付けて、リストのBuild a free-style software projectにチェックマークを付けます
  3. 「OK」を押すと、ジョブの構成ページに移動します。すべてのオプションには、それらのほかに小さな疑問符があります。これを押すと、オプションに関するヘルプテキストが表示されます。
  4. オプショングループ「ソースコード管理」の下で、Subversionを使用します。 Hudsonは、URLアクセスとローカルモジュールアクセスの両方を受け入れます
  5. オプショングループ「ビルドトリガー」の下で、「ポーリングSCM」を使用します。ここで使用される構文はcronの構文であるため、5分ごとにSubversionリポジトリをポーリングすると*/5 * * * *になります
  6. プロジェクトをビルドするプロセスは、オプショングループ「ビルド」で指定されます。必要なすべてのターゲットを含むantビルドファイルを既にお持ちの場合は、幸運です。 「Invoke ant」を選択して、ターゲットの名前を書きます。オプショングループは、mavenおよびShellコマンドをそのまま使用できますが、 phingに使用可能なプラグイン もあります。
  7. 電子メール通知やビルドアーティファクトのアーカイブなど、「ポストビルドアクション」で追加のビルドアクションを選択します。

Hudsonにプラグインがないプロセスをセットアップするには、ビルドセットアップ内からシェルスクリプトを介して直接呼び出すか、または 独自のプラグインを作成する

落とし穴:

  • ビルドアーティファクトを生成する場合は、定期的にハドソン自身をクリーンアップしてください。
  • 20を超えるプロジェクトを設定している場合は、notビルド状態をhudsonのデフォルトのメインページとして表示することを検討してください

幸運を!

76
Steen

あなたが探している用語は「継続的統合」です。

GIT + phpundercontrolを使用している人の例を以下に示します。 http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl(CIサーバー)は、Hosted SVN/GITをソースとして使用できます。そのため、GitHubやBeanstalkなどで使用することもできます。

次に、それを次の種類のソフトウェアと統合できます。

  • PHPUnit
  • php-codesniffer
  • phpdocumentor
  • PHP Gcov
  • PHPXref
  • ヤスカ
  • 等.

このホストされたCIを試すこともできます。 http://www.php-ci.net/hosting/create-project

ただし、これらのツールを自分で統合する場合は、カスタムサポートが必要なことに注意してください。

プロジェクト管理とパッチ管理についても考えましたか?

プロジェクト管理にRedmineを使用できます。継続的な統合サポートが統合されていますが、クライアント側としてのみ(CIサーバーとしてではありません)。

ホストされたSVN/GIT/etcを使用してみてください。なぜなら、彼らはあなたのバックアップをカバーし、彼らのサーバーを稼働させ続けるので、あなたは開発に集中できるからです。

Hudsonのセットアップ方法に関するチュートリアルについては、以下を参照してください。 http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

22
Michiel

私はAtlassianの Bamboo 継続的な統合サーバーをメインPHPプロジェクトに使用します(他の製品と一緒に fisheye (リポジトリブラウジング)、- jira (issue tracker)および clover (code coverage))。

SVNをサポートし、Gitをサポートし、優れたユーザーインターフェイスを備えています。 Linux、Windows、Macで利用でき、独自のTomcatサーバーでスタンドアロンで実行できます。これは、ツールのセットアップに数日かかることを好まない人(私のような)に最適です)。高価に見えるかもしれませんが、私自身が開発者であるため、スターターキットライセンスを10ドル(ソフトウェアで10ドル)で購入しました。これは小さなチームに最適であり、一見の価値があります。

6
Steven Rosato

PHPTesting PHPCI これは、PHPで構築されたニースの継続的統合サーバーです。

さらに、無料でオープンソースです。 :)

プラグインの数があります。

PHPCIには、次の統合プラグインが含まれています。

  • アトウム
  • ビハット
  • キャンプファイヤー
  • 共感
  • Composer
  • Eメール
  • うなり声
  • IRC
  • PHP
  • 糸くず
  • MySQL
  • PDepend
  • PostgreSQL
  • PHPコードスニファー
  • PHPコピー/貼り付け検出器
  • PHP仕様
  • PHPユニット
  • シェルコマンド
  • タール/ジップ
5
Ajay Patel

Jenkinsを使用することをお勧めします http://jenkins-ci.org/ 無料でオープンソースです。

セットアップは非常に簡単で、複数のプラットフォームで動作し、SonarQube(+ SQUALE)などの他の継続的統合ツールとうまく統合して、テストの自動化のための技術的負債とThucydidesを測定します。

SVNの代わりにバージョン管理にGITまたはGIT Hubを使用することを強くお勧めします。私の観点からは、それはあなたが後であなたの開発努力をスケーリングするのを助けるちょうど良いバージョン管理システムです。

主にPHPプロジェクトで作業しているので、使用できる他のツールがいくつかあります。

PHPUnit-単体テスト用

PHP CodeSniffer-コーディング標準の確認

PHP Depend-PHPコード依存関係を表示

XDEBUG-パフォーマンステスト用

これらのすべてのツールは、Jenkinsジョブでトリガーされ、コードの品質とパフォーマンスを支援します。

頑張ってお楽しみください!

3
AgileDeveloper

私は多くの製品、またはあなたが使用する種類の製品さえも使用しませんが、私の経験を提供します。

PROD環境と並行してTEST環境を実行します。ローカルテスト自体はありません。実際のテスト環境に移行するのが難しすぎる場合は、ビルドプロセスを修正します。環境が異なるため、ローカルでテストする意味がわかりません。更新:ローカルで行う唯一のことは、何かをアップロードする前に "php -l"を実行することです。愚かな間違いを止めます。

ビルドプロセスは、現在のワークスペースにあるもの(コミットされていないコードを含む)で動作します。これはみんなのお茶ではありませんが、私は頻繁にテストします。 PRODに進む前にすべてがコミットされます。

私のビルドプロセスの一部(あなたのものに似ています)は2つのMETAファイルを作成します。 1つには、最後の(通常)100個の変更が含まれ、現在のチェンジリスト番号も提供されます。どの変更がインストールされているかが表示されます。もう1つには、このビルドで使用されたブランチを正確に示すCLIENTSPEC(Perforce用語)が含まれています。これらを一緒に使用すると、再現可能なビルドが得られます。

ターゲット環境に直接構築するのではなく、サーバー上のステージング領域に構築します。 SSHを使用しているので、これは理にかなっています。これにはいくつかの利点があります。最も重要なことは、大規模なアップロードの途中で死ぬことを回避することです。また、METAファイルを保存する場所も提供され、すべてのビルドファイルが自動的にアーカイブされます(そのため、ビルドに戻ることができます)。また、スクリプトは更新をログに記録するため(ログストリームにエントリがあり、前後に表示されます)、すべてのデーモンをキックします(daemontoolsを使用して "svc -t")。これらはすべて、ターゲットマシン上で実行したほうがよいでしょう。

もう1つの問題は、DBの変更です。 DBスキーマのマスタースクリプトを保持し、スキーマが変更されるたびに更新します。また、各変更は、ビルドとともにステージング領域にアップロードされるchanges.sqlスクリプトにも送られます。スクリプトはインストールスクリプトの一部として実行されます。

3
Phil Wallach

私は主にシステム管理者ですが、時々PHPもコーディングします。サイドプロジェクトとして、本格的なPHP Jenkinsを使用したCI環境では、サンプルプロジェクトも実行されるため、各ビルドステップがどのように構成されているかを確認できます。

試してみたいのであれば、必要なのはDebian/Ubuntuボックスとシェルアクセスだけです。

http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

Update回答にコンテンツを追加するには:

Ansibleを使用して、PHPのJenkins CIをセットアップするだけです。v1.4以降は、galaxy.ansibleworks.comコミュニティサイトからダウンロードできるロールをサポートしており、あなたは jenkins-php と呼ばれます。

3
Stephan

fazend.com を検討してください。これは、構成およびインストール手順を自動化する無料のホストCIプラットフォームです。バージョン管理、バグ追跡、CIサーバー、テスト環境などを設定する必要はありません。すべてがオンデマンドで実行されます。

2
yegor256

私は最近、同じ種類のプロセスを開始し、svnホスティングに Beanstalk を使用しています。

有料アカウントには2つの気の利いた機能があります(午後15時からだと思います)。

  • 配置により、ユーザーはボタンをクリックするだけで配置できるステージングサーバーと運用サーバー用のftpターゲットを作成できます(リビジョンとブランチを指定)。
  • webhookを使用すると、ユーザーは各コミット/デプロイで呼び出されるURLを設定し、リビジョン番号、説明、ユーザーなどを渡すことができます。これは、ドキュメントの更新、単体テストの実行、変更ログの更新に使用できます。

これらの2つの機能を備えた他のホストまたはセルフホスティングのsvnサーバーがあると確信していますが、beanstalkは私が経験しているものであり、非常にうまく機能しています

APIもあります。これは、プロセスをさらに展開するために使用できると思います。

2
Adam Hopkinson