2010-11-17 13 views
23

私はこの問題に関するSOのここにある多くの質問を読みましたが、私たちの状況に合った良いアドバイスは本当にありません。私はこの作業の流れを継承し、それをより良くしようとしています。SVNウェブ開発ワークフロー

私たちのセットアップ

  • PHPのコードベース(特にKohanaの)
  • コードベースパワー〜60件のサイト、独自のテンプレートと各
  • (すなわち60 QA [品質保証]はあまりにもドメイン)各サイトは異なる資産およびリソース(すなわち、各ドメインについて8つのAレコード)のAレコードを有する。
  • 3人の開発者
  • 3デザイナー
  • 開発者は
  • すべての回で
  • デザイナーが
  • は、QAのために使用される物理的な開発サーバーを共有していない、コミット後の更新は、トランクの現在のHEADで、このサーバーを保持しますローカルの開発のための生産を運用サーバーのVMwareイメージを持っていますサーバー、ミックスとどのような機能に応じて、異なるリビジョンの試合に更新

私たちの仕事が流れて生きている

  • 開発者は、特定の機能が完了するまでローカルで作業し、内部QAのために機能全体をトランクにコミットします。
  • デザイナーは、CSS /画像/テンプレートのみを少し変更します。彼らは、トランクに直接コミットし、独自の変更をQAし、一般にQA直後にプロダクションサーバー上の対応するファイルを更新します。
  • フィーチャーをライブで使用できるようになると、本番サーバーはフィーチャーに関連する各ファイルの適切なリビジョン番号に手動で更新されます。時にはこれはシンプルですが、それ以外の時はかなり毛がかっています(上流の依存関係を調べるために多くのsvn logが呼び出されます)。

私たちの問題QAの異なる量を必要とするさまざまな機能に取り組んで三つの異なる開発者と

  • 、我々は自分自身が定期的に上流の依存関係の問題に実行して見つけます。
  • どの時点でも、プロダクションサーバー上の機能とプロダクト以外の機能をプログラマチックに決定する方法はありません。 svn status -uは、どのファイルが最新ではないかを表示しますが、一般的には機能の明確な画像ではありません。私は、私たちの問題の

    • 一部は、生産ブランチを持つことによって軽減することができ知って何

    。アップストリームの依存関係の問題を解決することはできませんが、少なくとも、どの機能がプロダクションに追加されたかを監視することは可能です。

  • フィーチャーブランチはオプションであり、私たちはそれを過去に試みました。私たちのソフトウェアは支店あたり60個のQAドメインを必要とするため、そこでプロセス管理の問題にぶつかります。たとえば、各機能ブランチごとに480個のドメイン(ドメインあたり60ドメイン×8レコード)のAレコードを作成します。
  • 開発者ブランチもオプションですが、私たちの機能QA時間は異なります。私は間違いなく、他のことをコミットする前に以前の機能がQAから外れるとは言えません。

上流の依存関係の例

  • 開発者Aは、管理者とフロントエンドの両方に新しいスライドショー機能が追加されます。
  • 開発者Bは、管理者とフロントエンドの両方に新しいフィードバック機能を追加しました。
  • これらの機能は両方とも、ロケーションモデル/コントローラロジックと絡み合っているため、新しい機能の両方を考慮して、関連するファイルに変更が加えられます。
  • スライドショー機能はQAに入りますが、一部の開発監督またはスコープクリープによって保持されます。
  • フィードバック機能はQAに入り、問題なく通過します。
  • タイムラインに沿ってフィードバック機能をプロダクションにプッシュしたいが、どちらの機能もロケーションモデル/コントローラに変更が必要なため、フィードバック機能を直接行うことはできません。つまり、svn update file1 file2 file3を実行するだけではありません。
  • 注:これは簡単な例で、逆引きマージを行うことで回避できます。しばしば、私たちの問題はこれよりも複雑です。

マルチサイト構造情報

  • 我々は等を事前に定義された構造的なテーマの数、ビュー、画像、CSSファイル、JSファイルから成るが、持っている
  • 各サイトテーマが割り当てられます。
  • ブランド化と拡張性の理由から、各サイトはカスタムビューでテーマビューを上書きしたり、サイト固有のCSS/JSファイルを追加したりすることができます。

似たような問題で苦労している他の人々がいると確信しています。私はインターネット上の賢い人々からいくつかの洞察を得ることを望んでいます。私が言ったことが泥のようにはっきりしているのであれば、自由に質問してください!

+0

ちょうど疑問を持って、何のためにQA略ですか? –

+5

主な問題のようなサウンドは、ソフトウェアがモジュール化されているはずですが、アプリケーションレイヤーではなくファイルレイヤーで実現しようとしています。このカスタマイズ性は、アプリケーションの明示的な部分であり、設定ファイルを介して制御可能であり、一度にすべてのサーバーにプッシュできるコードベースの単一バージョンのみを維持する必要があります。それは物事をかなり単純化するはずです。 – deceze

+0

@Brad lmao、私はQAの頭にこの記事を転送している、彼女は開発者の誰もQAが何かを知っているとは思わない。笑。 –

答えて

1

あなたのワークフローを改善することができるが、ここに私のアドバイスのリストです:

  • 定期的なサイクルでSVNの枝とリリースビルド/展開を使用してスタート。
  • デプロイサイクルをどのくらいの期間保持するかを把握し、QAのための時間を残してください。たとえば、毎月ビルドをリリースする場合は、3週間の開発期間と1週間のQA期間があります。そのビルドのためのバグ修正を除く3週間後の開発のフリーズ。
  • 部屋の拡大を許可するビルドのナンバリングスキームを決定する
  • チケットシステム(ActiveCollab、JIRA、Mantis ...など)を利用して、コミットをチケットに関連付けるルールを適用します。あなたのコミットをチケットに自動的に表示させる場所を選んでください。
  • 開発を開始する前に要件を文書化し始める場合は、チケットシステムで要件を収集しないでください(神のために)
  • これを行うと、特定のビルドに含まれる機能を判断するのに役立ちます。だからチケット番号の一覧や各ビルドのチケットの一般的な説明とリリースノートのいくつかの並べ替えを行います。
  • アプリケーションにビルド番号を埋め込んで、任意のシステムで展開を追跡できるようにします。
  • QAをスピードアップし、一日一日への変更は新しいバグを導入可能性を減少させることによって、Webアプリケーションの品質/安定性を向上させる機能テストのためのユニットテストとSeleniumのための自動テストツールのPHPUnitで作業を開始。
  • ハドソンとPhingのは、あなたのビルドを自動化し、あなたのテストを自動化するためのライフセーバーすることができます。
1

OK、思考のカップル:

ワークフローのこの種のために、あなたはのAccuRevまたはClearCaseのように、ストリームモデルとSCMとはるかに良いだろう。ストリームモデルでは、各開発者のストリームから統合ストリームに、次にQAストリームに、次にストリームを解放するように(または何が最善のものであれ)作業が流れます。次の段階に進む準備が整った作業だけが動かされ、これらの作業バンドルだけで統合が行われます。

decezeによれば、モジュラ的に問題を解決する必要がありますが、クライアント固有の機能がコードの特定の部分をオーバーライドできるローカリゼーションシステムと組み合わせる必要もあります。私がPHPで行った1つの方法は、まずクライアント固有のバージョンのPHPファイルを探すPHPファイルインポートラッパーを実装することです。存在しない場合は、代わりに汎用のものをロードします。、あなたは優雅にウェブサイトだけでは、クライアントのために働く方法の一部を上書きすることができ、それらはバンプしませんので、そのクライアントのために、その機能に取り組む人は完全に異なるファイルで作業している技術を使用して

function importModule($module, $clientId){ 
    if(is_file("${clientRootDir}/${clientId}/${module}.php")) { 
     import("${clientRootDir}/${clientId}/${module}.php"); 
    } else { 
     import("${defaultRootDir}/${module}.php"); 
    } 
} 

お互いに あなたが既にこれを行っているかどうかわからないのですが、それはあなたが「ロケーションモデル」と呼ぶものです

最後に、この多数の異なる「仮想ウェブサイト」をテストすると、自動ユニットテストa la PHPUnit)と継続的な統合を組み合わせることで、ソフトウェアが統合段階に至るまでテストを自動的に開始します。

関連する問題