2009-06-24 7 views
4

ここには状況があります。さまざまなレベルのコマンドラインエクスペリエンスを持つ複数の開発者がおり、私たちのウェブサイトのデプロイメントソリューションをまとめています。運用環境は2つのSUSE Linuxボックスです。開発環境はSUSE Linuxボックスでもあります。各開発者は、開発およびテストのために、ホームディレクトリにSVNツリーのコピーを持っています。SVNウェブサイト開発とデプロイメントソリューション

目的は、使用しやすく、元に戻すのが簡単なリリースシステムを複数の本番サーバーで使用できるようにすることです。ウェブ以外の開発者(まだウェブ世界にいないコーダー)がウェブサイトのいずれかを簡単に元に戻すことができれば、ボーナスになるでしょう。最適な世界では、リリースするWebサイト上で1つのコマンドを実行するだけで簡単にリリースできます。このコマンドは実稼働サーバーを更新し、復帰パスを起動します。

現在のデプロイメントソリューションは、ちょっとしたもので、元に戻すのが非常に難しく、汚れとして遅くなります。現在SVNを使用してすべてのファイルをチェックインしています。 SVNに基本的にタグを作成するスクリプトが実行されます。 2つ目のスクリプトが実行され、2台のプロダクションサーバーのそれぞれに行き、 'svn up'を実行します。

提案がありますか?

+1

私はCapistranoとCruiseControlを含む以下の提案をいくつか試してみました。そしてSpringLoopsをチェックアウトしました(本当にクールな解決策ですが、私たちにとってはうまくいかないでしょう)。 PHP Phingは完全にマッチしてしまった。カスタマイズやセットアップが簡単ではありません。 – prime31

答えて

0

実行する可能性のあるものの1つは、異なるバージョンの異なるデータベース構造を前後に移動することです。あなたがそれに必要な初期化データを持っている場合、Moreso。

+0

当社のSQLサーバ(MYSQLとMSSQL)と顧客データベースサーバの間にあるミドルウェアとしてカスタムアプリケーションサーバを使用し、データがすでに処理されています。 – prime31

+0

Jasは、データベースへの変更(またはデータベース内のデータ)を、revertコマンドでロールバックできないことを意味します。機能的なWebアプリケーション=データベース+コードが一緒に働くこと。データベースに異なるスキーマがある場合、(以前の)機能コードに戻ることができない場合があります。 – Ted

0

ant/phingのような既存のビルドツールや、xincphpUnderControlのようなCIソリューションを見たことがありますか?

+0

phingはかなり有望に見えます... – prime31

0

私の経験では、破壊的な更新を扱う簡単な方法がないため、「復帰」機能はほとんど維持できません。つまり、あなたは間違いなくちょうどsvn upより良いことができます。少なくとも、コードがチェックアウトされた後にスクリプトを実行し、アプリケーションにパッチを適用することができます(データベースを変更するなど)。実際のアップデートもアトミックにしたいと思うでしょうから、テンポラリフォルダにsvn exportを入れて、シンボリックリンクを更新して、フォルダを指すようにしてください。パッチの実行中にサービスを停止したいと思うかもしれません。

カピストラノのようなものを使って、素敵なパッケージに包んでみることができます。それはかなり我々ベースのGUI(Webistrano)が付属しています。

2

私は.NETの人間ですから、Windowsの世界ではうまく動作します...私は日常的にビルドプロセスを管理するテクノロジはあなたの世界から来ました! (Linux/javaテクノロジはカッコで囲まれていますが、Windowsの読者にも同等の機能が提供されています)私はすべてのビルドニーズに対応するためにCruiseControl.NETCruiseControl)、VisualSVNSVN)、TortoiseNAnt

私のビルドはすべて、通常、チェックイン時に自動的にプッシュされ、タグ付けされます。これは、ソースコントロール(SVNまたはサブバージョン)を監視するCruiseControlで行われます。 CruiseControl(CC)は、新しいコードがチェックインされたことを確認すると、ビルドサーバー上のAntスクリプトを呼び出すCCプロジェクトを実行します。

Antスクリプトは、私にとって共通のビルドでいくつかのことを行います。最新のコードのコピーをチェックアウトし、ビルドサーバーに持ってきます。次に、少なくともコンパイルを行うためのコードを作成します。次に、データベースのクリーンコピーを設定し、SQLスクリプトを実行して、そのベースラインdbを現在のバージョンまでビルドします。私はすべての単体テストプロジェクトを実行します。次に、統合テストを実行します。これは、リポジトリレイヤをテストして、コードが私のバックエンドと揃っていることを確認します(私は通常、自分のプロジェクトでORMを使用しているため、同期が崩れることはほとんどありません...)過程の中で)。すべてのテストが合格(または失敗)したら、データベースをクリーンな状態にロールバックし、スクリプトを実行して現在のバージョンに戻します(クリーンなデータベースをクリックするとチームに提供されるので重要です)ボタンの)。ビルドが成功した場合は、コードを開発サーバーに展開します(ステージングサーバーと運用サーバーへのワンクリック展開もあります)。それぞれのチェックでコードベースにタグを付けるのが好きなら、ここでもそれを行うことができます。

これが完了したら、NDependNDoc、およびNCoverを使用してコードを分析したいと思います。 NDependは、物事が構造的に正しいこと、名前付け基準がそうであるようにすること、そしてそれ以上のものを確実にするためのコード分析ツールです。 NDocはすべてのコードコメントを抽出し、自分のコードのMSDNスタイルのドキュメントを作成します。 NCoverは私のコードの単体テストを適切にカバーしているかどうかを教えてくれます。

私は、さまざまなTODOおよび// CodeDebtタグのすべてのコードを解析して、別のレポート(通常はスプリントの終わりに)を生成するためのタグを解析するカスタムAntタスクを作成します。私のコードベースにはたくさんの駄目が蓄積されています。これを次のスプリントに組み込むことができます。

これらのレポートはすべて、外出するビルドメールに含まれているか、あまりにも適切にリンクされています。

上記のすべてがチェックインするたびに発生し、ボタンを1つでもクリックする必要がないことに注意してください。これは真の継続的な統合であり、すべてのビルドマスタの目標でなければなりません。

CruiseControlにはWebベースのコンソールがあり、非Web開発者(誰でも)が入り込み、コードをチェックすることなくこのプッシュを実行することができます。

このフレームワークを使用すると、すべてがバージョン管理されている限り、プッシュを簡単にロールバックすることができます。同じプロセスを実行する別のAntスクリプトが必要ですが、ビルドプロセスを実行するのに最新のコードではなく最後のバージョンのコードを取得する必要があります。 Antタスクはすべて、別の実行ターゲットで再利用できます。

1

簡潔にするため、SpringLoopsを試してみてください。 のホストされたsvnサービスで、別のサーバに展開(および復帰)するオプションがあります。実際に使用してセットアップするのは簡単ですが、無料のバージョンでは1台のサーバーに展開できますが、お支払いをご希望の場合は、さまざまなサーバー(ステージング、開発、運用)に展開できます。

無料で30日間のパッケージを手に入れることができるので、必要な数のサーバーでテストできます。私はスプリングループには関係していません。私はちょうどそれを使用して、それが有用で単純な単純なことを見つける。

2

Capistranoはすばらしい解決策です。もともとRuby on Railsプラットフォーム用に開発されたものですが、私はこれを多くのPHPプロジェクトでうまく使用しました。 SSH経由で実行されるアクションを自動化します。各展開が新しいディレクトリにチェックアウトされるため、展開はアトミックです。

現在のコピーは、シンボリックリンクを使用してオンになっています。ソースの最新バージョンはSubversionから取得されます。運用環境で使用する静的構成ファイルを設定することもできます。

カプリストラーもロールバックをサポートしていますが、デプロイメント間でデータベースを変更する場合は、ここで注意する必要があります。この問題を解決するには、dbdeployまたはレールmigrationsのようなものを使用することを検討してください。

0

プロダクションサーバーにファイルをデプロイする場合、人形劇は両方の構成管理にとって素晴らしいツールであり、サブバージョン(またはgit)からコンテンツを展開するためにも使用できることをお勧めします。ルックアップパペットとvcsdeployモジュールhttp://www.practicalclouds.com/content/guide/pclouds-vcsdeploy-deploy-stuffは人形鍛造の上にある。