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


200

私はほとんどの場合、孤独な開発者であり、主にPHPベースの多数の大きなプロジェクトに取り組んでいます。コードベースへの変更の処理方法を専門化して自動化し、基本的な変更を加えることなくチームでの作業への移行を可能にする継続的インテグレーションプロセスを作成したいと考えています。

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

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

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

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

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

  • 新しいリビジョンはFTP経由でリモートの場所に展開されます(ディレクトリの名前変更、chmodding、データベースのインポートなどが含まれます)。これは既にphingが非常に好きなものですが、もちろん代替手段を用意しています。

  • 事前定義された場所にあるユニットテストが実行されます。電子メール、RSS、または(できれば)HTML出力を使用して、それらの失敗または成功について知らせてもらい、Webページに取り込むことができます。

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

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

を探しています

  • 同様の状況にある、または同様の状況にあり、このためのソリューションを正常に実装した人々からのフィードバックと経験

  • 特に、これを設定する方法についての良いステップバイステップのチュートリアルとウォークスルー

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

そしてまた

  • 製品の推奨事項。私がこれまで知っていることであるPhingの構築のために/アリを、そしてphpUnderControlまたはハドソン報告部分について。私は見る限りすべて好きですが、もちろん詳細な経験はありません。

私は仕事に溢れているので、単純な解決策に強い傾向があります。一方、機能が不足している場合は、機能が制限されすぎていることを叫びます。:)ポイントアンドクリックソリューションも大歓迎です。また、PHPプロジェクトで機能する商用製品の推奨事項にも同意します。

私のセットアップ

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

バウンティ 私が最も燃費が良いと感じる答えを受け入れます。ここには多くの優れた入力があります。複数の回答を受け入れることができればと思います。みんな、ありがとう!

回答:


76

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

  1. セットアップは簡単です
  2. 簡単にカスタマイズできます
  3. 見た目も良く、概要機能も素晴らしい
  4. それ自体、およびインストールされているすべてのプラグインについて、ポイントアンドクリックで更新されます。これは本当に素晴らしい機能です。

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

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

前提条件:

  • Java(1.5は問題なく機能します)
  • Subversionサーバーへの読み取りアクセス権(私はhudsonユーザー用に別のアカウントを持っています)

ここからは:

java -jar hudson.war

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

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

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

アップデートカワグチコウスケ氏が構築したWindowsサービスのインストーラハドソンのために

Hudsonでプロジェクトをセットアップする

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

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

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

落とし穴:

  • ビルドアーティファクトを生成する場合は、ハドソン自体が定期的にクリーンアップするようにしてください。
  • 20を超えるプロジェクトを設定している場合は、それらのビルドステータスをhudsonのデフォルトのメインページとして表示しないようにしてください

幸運を!


2
cron構文にエラーがあると思います。それは毎時の5分目に実行されます。5分ごとにリポジトリをポーリングする場合は、* / 5を使用する必要があります
Brian Wigginton 2012

2
@BrianWigginton:あなたは完全に正しいです。投稿を修正しようとしましたが、「localhost」という「無効なホスト名への参照」があるため、保存できません。是非ここを見て是正して欲しい。
スティーン

22

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

これは、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などを使用してみてください。ソリューション。バックアップをカバーし、サーバーを稼働させ続けるため、開発に集中できます。

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


2
リンクをありがとう。私がよく知っている製品、私が期待しているのは、あなたが提供したようなチュートリアルスタイルのウォークスルーです。
Pekka

こんにちは、2012年10月の時点で、php-ci.netはダウンしているか、すでにサービスから削除されていますか?そのアドレスに接続できないようで、昨年の新しい情報も見つかりません。
Ryan

@ライアン、何が起こったのかわからない。私は知っています、あなたは他の人を試すことができます。多分あなたは試すことができます:CircleCI またはあなたはこのトピックをチェックすることができます:PHPのホストされた継続的統合?
Michiel、2014年

@ライアン、それはダウンではありません、私は今しばらくそれを使っています。彼らはphptesting.orgに移動しました
omrakhur

6

私のメインPHPプロジェクトには、AtlassianのBamboo継続的統合サーバーを使用しています(魚眼レンズ(リポジトリ参照)、jira(課題追跡)、クローバー(コードカバレッジ)などの他の製品と共に)。

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


phingをサポートするように竹を構成するにはどうすればよいですか?私は現在antを使用していますが、php depooymentの使用にはphingの方が適しているようです。ありがとう
Vincent

5

PHPTesting PHPCIこれは、phpに組み込まれた優れた継続的統合サーバーです。

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

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

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

  • アトゥム
  • Behat
  • キャンプファイヤー
  • Codeception
  • 作曲
  • Eメール
  • うなり声
  • IRC
  • PHP
  • リント
  • MySQL
  • PDepend
  • PostgreSQL
  • PHPコードスニファー
  • PHPコピー/貼り付け検出
  • PHP仕様
  • PHPユニット
  • シェルコマンド
  • タール/ジップ

PHPCIは好きですが、お勧めしません。信じられないほどバグが多く、信頼性がありません。残念なことに、共通の基本機能が適切にユニットテストされていないため、プロジェクトのURLを追加するなどの基本的な作業は、失敗しない限り困難です。
Tek

@Tek PHPのCI戦略は何ですか?
omrakhur

1
@omrakhur残念ながらPHPCIに悩まされています。他のすべてのソフトウェアは非常にかさばり、セットアップに多くの時間がかかります。すべての長所と短所があります。あなたはあなたのために最もうまくいくものに行かなければなりません。
Tek

3

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

試してみたい場合は、Debian / Ubuntuボックスとシェルアクセスがあれば十分です。

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

更新私の回答にコンテンツを追加するには:

Ansibleを使用して、PHP用のJenkins CIを簡単に設定できます。v1.4以降は、galaxy.ansibleworks.comコミュニティサイトからダウンロードできるロールをサポートしており、面倒な作業を行います。これはjenkins-phpと呼ばれます。


3

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

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

バージョン管理には、SVNの代わりにGITまたはGIT Hubを使用することを強くお勧めします。私の観点から見ると、後で開発作業を拡張するのに役立つバージョン管理システムとしては優れています。

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

PHPUnit-ユニットテスト用

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

PHP依存-PHPコードの依存関係を表示します

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

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

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


3

私は多くの製品、またはあなたが使用するタイプの製品さえ使用していませんが、私はあなたに私の経験を提供します。

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

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

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

ターゲット環境に直接ビルドするのではなく、サーバーのステージング領域にビルドします。私はSSHを使用しているので、これは理にかなっています。これにはいくつかの利点があります。最も重要なのは、大量のアップロードの途中で死ぬことを回避することです。また、METAファイルを保存する場所も提供し、すべてのビルドファイルは自動的にアーカイブされるので、どのビルドにも直接戻ることができます。また、スクリプトは更新をログに記録し(ログストリームにエントリがあり、事前と事後を確認できます)、すべてのデーモンを起動します(daemontoolsを使用しているため、「svc -t」)。これらはすべて、ターゲットマシンで使用する方が適切です。

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


フィルさん、ありがとうございました。これは非常に興味深い設定です。私はこの一部を使用できると思います。ただし、私の場合は、リモートエンドへのSSHアクセスがほとんどないため、ローカルに多くの「インテリジェンス」が必要です。そのため、HudsonのようなCI製品が必要になると思います。
Pekka

2

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

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

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

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

APIもあります。これを使用して、デプロイメントをプロセスにさらに統合することができます。


乾杯@adam。私はこれのためにホストされたサービスをあまり探していません。私が必要とするものに対して常にそれらが制限されすぎることを恐れているからです。しかし、あなたが言うことは興味深いように聞こえ、APIは残りの部分の接続点になるかもしれません。これを見てみましょう。
ペッカ

心配する必要はありません。私は今のところ私に適しています、私は頭の周りのsvn(そして私は一人のチームです)を完全に持っていないので、移動したい場合は完全なレポエクスポートを提供します。
アダムホプキンソン2010

2

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


うーん、これはとても面白いですね!しかし、彼らはどのように生き残るのですか?すべて無料だと思いますか?彼らはどのようにサーバーとE3料金を支払いますか?
Pekka

@Pekkaこのプロジェクトはソフトウェア開発会社が後援しているため、サービスは無料です
yegor256
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.