202

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

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

私が想定している「ビルドサイクル」は、次のことを行います。

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

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

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

  • 新しいリビジョンはFTP経由でリモートロケーションにデプロイされます(ディレクトリの名前変更、chmodding、データベースのインポートなどを含みます)。これは私がすでに非常に好きなものですが、もちろん別の方法もあります。

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

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

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

を探しています

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

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

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

そしてまた

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

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

私のセットアップ

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

報奨金 私は私が最もマイレージを与えると思う答えを受け入れています。ここには素晴らしい意見がたくさんあります。複数の答えを受け入れられたらいいのにと思います。みんな、ありがとう!

4

9 に答える 9

77

私はbuildbotCruiseControl.netCruiseControlHudsonを経験してきました。私はCruiseControl*が本当に好きでしたが、非常に複雑な依存関係のケースでは面倒でした。buildbotのセットアップは簡単ではありませんが、素晴らしいオーラがあります(私はPythonが好きです、それだけです)。しかし、ハドソンは前の3つに勝ちました。理由は次のとおりです。

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

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

ハドソンサーバーのセットアップ

前提条件:

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

ここからは、次のようになります。

java -jar hudson.war

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

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

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

更新川口耕介がハドソン用のWindowsサービスインストーラーを構築しました

ハドソンでプロジェクトを立ち上げる

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

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

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

落とし穴:

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

幸運を!

于 2010-02-08T23:13:06.360 に答える
23

あなたが探している用語は「継続的インテグレーション」です。

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

CruiseControl(CIサーバー)は、ホストされた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/を参照してください。

于 2010-02-02T14:35:08.747 に答える
6

私はメインのPHPプロジェクトにAtlassianのBamboo継続的インテグレーションサーバーを使用しています(フィッシュアイ(リポジトリブラウジング)、jira(課題追跡システム)、クローバー(コードカバレッジ)などの他の製品一緒

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

于 2010-02-05T00:24:27.873 に答える
5

PHPTesting PHPCIこれは、phpに組み込まれた優れた継続的インテグレーションサーバーです。

さらに、その無料のオープンソース。:)

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

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

  • アトゥム
  • Behat
  • キャンプファイヤー
  • Codeception
  • 作曲
  • Eメール
  • グラント
  • IRC
  • PHP
  • リント
  • MySQL
  • PDepend
  • PostgreSQL
  • PHPコードスニファー
  • PHPコピー/貼り付け検出器
  • PHP仕様
  • PHPユニット
  • シェルコマンド
  • タール/ジップ
于 2014-05-14T09:26:58.537 に答える
3

私はあなたが使っている製品の多く、あるいはあなたが使っている種類の製品さえも使っていませんが、私はあなたに私の経験を与えます。

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

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

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

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

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

于 2010-02-09T10:37:04.957 に答える
3

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

試してみたい場合は、Debian/Ubuntuボックスとシェルアクセスだけが必要です。

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

更新私の答えにいくつかのコンテンツを追加するには:

Ansibleを使用してPHP用のJenkinsCIを設定するだけです。v1.4以降、galaxy.ansibleworks.comコミュニティサイトからダウンロードできる役割をサポートしており、手間のかかる作業を行います。これはjenkins-phpと呼ばれます。

于 2014-01-25T00:37:47.740 に答える
3

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

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

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

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

PHPUnit-ユニットテスト用

PHPCodeSniffer-コーディング標準を確認します

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

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

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

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

于 2014-06-06T20:11:21.427 に答える
2

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

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

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

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

APIもあります。これは、デプロイメントをプロセスにさらに統合するために使用できると思います。

于 2010-02-02T13:37:35.920 に答える
2

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

于 2010-10-24T14:55:27.320 に答える