私はほとんどの時間、孤独な開発者であり、多くの大きなPHPベースのプロジェクトに取り組んでいます。コードベースへの変更の処理方法を専門化し、自動化し、基本的な変更を行わずにチームで作業するための移行を可能にする継続的統合プロセスを作成します。
私が今していることは、すべてのプロジェクトにローカルなテスト環境があることです。各プロジェクトにSVNを使用しています。変更はローカルでテストされ、通常はFTP経由でオンラインバージョンに転送されます。 APIドキュメントは、ソースコードから手動で生成されます。ユニットテストは私がゆっくりと始めているものであり、それはまだ私の日常の一部ではありません。
私が想定している「ビルドサイクル」は次のようになります。
ローカルでテストされた後、変更セットはSVNにチェックインされます。
ビルドプロセスを開始します。 SVN HEADリビジョンはチェックアウトされ、必要に応じて変更され、アップロードの準備が整います。
APIドキュメントは自動的に生成されます-まだ詳細に設定していない場合、デフォルトのテンプレートを使用して、コードベース全体をスキャンします。
新しいリビジョンは、FTPを介してリモートの場所に展開されます(ディレクトリ名の変更、chmodding、データベースのインポートなどが含まれます)。これは私がすでに気に入っているものです phing もちろん代替案について。
定義済みの場所にある単体テストが実行されます。電子メール、RSS、または(できれば)HTML出力を使用してそれらの失敗または成功について通知され、それらを取得してWebページに入れることができます。
(オプション)事前定義された場所にあるエンドユーザーの「変更ログ」テキストファイルは、コミットメッセージの事前定義された部分で更新されます(「同時に、「foo」と「bar」このメッセージは、SVNコミットメッセージと必ずしも同じではなく、おそらくはるかに多くの内部情報が含まれています。
コードメトリックス、コードスタイルチェックなどのようなものは、現在のところ私の主な焦点ではありませんが、長期的には確かにそうなります。このすぐに使用できるソリューションは非常に親切に検討されています。
を探しています
同様の状況にある、または同様の状況にあった人々からのフィードバックと経験
特に、適切なステップバイステップのチュートリアルとチュートリアルでこれを設定する方法
可能な限り多くの自動化を提供するソリューション。たとえば、新しいプロジェクトごとにスケルトンAPI、テストケースなどを作成します。
そしてまた
私は仕事に圧倒されていますので、単純な解決策に強い傾向があります。一方、機能が欠落している場合は、機能が制限されすぎていると泣きます。 :)ポイントアンドクリックソリューションも歓迎します。また、PHPプロジェクトで使用できる商用製品の推奨事項にも従います。
私のセットアップ
私はローカルでWindows(正確には7)で作業しており、ほとんどのクライアントプロジェクトはLAMPスタック、多くの場合共有ホスティング(=リモートSSHなし)で実行されています。自分の環境で実行できるソリューションを探しています。 Linuxをセットアップする準備ができていますVMこれは問題ありません。ホストされたソリューションは、説明されているすべての側面を提供するか、他の部分と対話するのに十分な柔軟性がある場合にのみ興味深いですプロセスの。
バウンティマイレージが最大になると思う答えを受け入れています。ここには多くの優れた入力があります。複数の回答を受け入れたいと思います。みんな、ありがとう!
buildbot 、 CruiseControl.net 、 CruiseControl 、および Hudson を使用しました。私は本当にCruiseControl *が大好きでしたが、本当に複雑な依存関係の場合には面倒でした。 buildbotのセットアップは簡単ではありませんが、素晴らしいオーラがあります(私はpythonが好きです、それだけです)。しかし、ハドソンは前の3つを勝ち取りました。
警告:上記のビルドサーバーのベースとしてLinuxのみを使用しました(CC.netは mono で実行されていました)が、ドキュメントによると、すべてクロスプラットフォームで実行する必要があります。
前提条件:
ここからは、次のとおりです。
Java -jar hudson.war
これにより、コンソールから小さなサーバーインスタンスが実行されます。事前にそのポートで他に何も実行していない場合は、http://localhost:8080
でインストールを参照できます(別のポートを指定するには、上記のコマンドに--httpPort=ANOTHER_HTTP_PORT
オプションを渡す)と、すべてが「インストール」プロセスでうまくいきました。
使用可能なプラグインディレクトリ(http://localhost:8080/pluginManager/available
)に移動すると、上記のタスクをサポートするためのプラグインが見つかります(Subversionサポートはデフォルトでインストールされます)。
食欲をそそる場合は、Java Tomcat や jetty などのアプリケーションサーバーをインストールする必要があります。 インストール手順 はすべての主要なアプリケーションサーバーで利用可能です
Update: Kawasuke Kawaguchi は構築されました windows service installer for hudson
次のウォークスルーのリンクは、http://localhost:8080
にあるhudsonの実行中のインスタンスを想定しています
http://localhost:8080/view/All/newJob
)を選択しますBuild a free-style software project
にチェックマークを付けます*/5 * * * *
になりますHudsonにプラグインがないプロセスをセットアップするには、ビルドセットアップ内からシェルスクリプトを介して直接呼び出すか、または 独自のプラグインを作成する
幸運を!
あなたが探している用語は「継続的統合」です。
GIT + phpundercontrolを使用している人の例を以下に示します。 http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
CruiseControl(CIサーバー)は、Hosted SVN/GITをソースとして使用できます。そのため、GitHubやBeanstalkなどで使用することもできます。
次に、それを次の種類のソフトウェアと統合できます。
このホストされた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/
私はAtlassianの Bamboo 継続的な統合サーバーをメインPHPプロジェクトに使用します(他の製品と一緒に fisheye (リポジトリブラウジング)、- jira (issue tracker)および clover (code coverage))。
SVNをサポートし、Gitをサポートし、優れたユーザーインターフェイスを備えています。 Linux、Windows、Macで利用でき、独自のTomcatサーバーでスタンドアロンで実行できます。これは、ツールのセットアップに数日かかることを好まない人(私のような)に最適です)。高価に見えるかもしれませんが、私自身が開発者であるため、スターターキットライセンスを10ドル(ソフトウェアで10ドル)で購入しました。これは小さなチームに最適であり、一見の価値があります。
PHPTesting PHPCI これは、PHPで構築されたニースの継続的統合サーバーです。
さらに、無料でオープンソースです。 :)
プラグインの数があります。
PHPCIには、次の統合プラグインが含まれています。
Jenkinsを使用することをお勧めします http://jenkins-ci.org/ 無料でオープンソースです。
セットアップは非常に簡単で、複数のプラットフォームで動作し、SonarQube(+ SQUALE)などの他の継続的統合ツールとうまく統合して、テストの自動化のための技術的負債とThucydidesを測定します。
SVNの代わりにバージョン管理にGITまたはGIT Hubを使用することを強くお勧めします。私の観点からは、それはあなたが後であなたの開発努力をスケーリングするのを助けるちょうど良いバージョン管理システムです。
主にPHPプロジェクトで作業しているので、使用できる他のツールがいくつかあります。
PHPUnit-単体テスト用
PHP CodeSniffer-コーディング標準の確認
PHP Depend-PHPコード依存関係を表示
XDEBUG-パフォーマンステスト用
これらのすべてのツールは、Jenkinsジョブでトリガーされ、コードの品質とパフォーマンスを支援します。
頑張ってお楽しみください!
私は多くの製品、またはあなたが使用する種類の製品さえも使用しませんが、私の経験を提供します。
PROD環境と並行してTEST環境を実行します。ローカルテスト自体はありません。実際のテスト環境に移行するのが難しすぎる場合は、ビルドプロセスを修正します。環境が異なるため、ローカルでテストする意味がわかりません。更新:ローカルで行う唯一のことは、何かをアップロードする前に "php -l"を実行することです。愚かな間違いを止めます。
ビルドプロセスは、現在のワークスペースにあるもの(コミットされていないコードを含む)で動作します。これはみんなのお茶ではありませんが、私は頻繁にテストします。 PRODに進む前にすべてがコミットされます。
私のビルドプロセスの一部(あなたのものに似ています)は2つのMETAファイルを作成します。 1つには、最後の(通常)100個の変更が含まれ、現在のチェンジリスト番号も提供されます。どの変更がインストールされているかが表示されます。もう1つには、このビルドで使用されたブランチを正確に示すCLIENTSPEC(Perforce用語)が含まれています。これらを一緒に使用すると、再現可能なビルドが得られます。
ターゲット環境に直接構築するのではなく、サーバー上のステージング領域に構築します。 SSHを使用しているので、これは理にかなっています。これにはいくつかの利点があります。最も重要なことは、大規模なアップロードの途中で死ぬことを回避することです。また、METAファイルを保存する場所も提供され、すべてのビルドファイルが自動的にアーカイブされます(そのため、ビルドに戻ることができます)。また、スクリプトは更新をログに記録するため(ログストリームにエントリがあり、前後に表示されます)、すべてのデーモンをキックします(daemontoolsを使用して "svc -t")。これらはすべて、ターゲットマシン上で実行したほうがよいでしょう。
もう1つの問題は、DBの変更です。 DBスキーマのマスタースクリプトを保持し、スキーマが変更されるたびに更新します。また、各変更は、ビルドとともにステージング領域にアップロードされるchanges.sqlスクリプトにも送られます。スクリプトはインストールスクリプトの一部として実行されます。
私は主にシステム管理者ですが、時々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 と呼ばれます。
fazend.com を検討してください。これは、構成およびインストール手順を自動化する無料のホストCIプラットフォームです。バージョン管理、バグ追跡、CIサーバー、テスト環境などを設定する必要はありません。すべてがオンデマンドで実行されます。
私は最近、同じ種類のプロセスを開始し、svnホスティングに Beanstalk を使用しています。
有料アカウントには2つの気の利いた機能があります(午後15時からだと思います)。
これらの2つの機能を備えた他のホストまたはセルフホスティングのsvnサーバーがあると確信していますが、beanstalkは私が経験しているものであり、非常にうまく機能しています
APIもあります。これは、プロセスをさらに展開するために使用できると思います。