2011-07-27 6 views
4

は、この質問は、私が働いている開発チームに上がってきた私たちは本当にコンセンサスを得ることができませんでした:は常にデータベースの変更をCIの一部にする必要がありますか?

Should changes to the database be part of the CI script?

あなたが作業しているアプリケーションが関与するデータベースを持っていると仮定します。私はそれが統合の定義なので、はいと思います。アプリケーションの一部を含めていない場合は、実際に統合をテストしているわけではありません。反対の議論は、CIサーバーが基本的なプロジェクトセットアップの動作を確認する場所であることです。つまり、コードの最新バージョンのバージンチェックアウトを構築することです。

この質問に回答するCIの「ベストプラクティス」文書はありますか? CIについて熱心な人たちの間で議論されているのでしょうか?

Martin Fowler's opinion on it:

よくある間違いは、自動ビルドのすべてを含めることはありません。 ビルドには、データベース・スキーマを リポジトリから取り出し、実行環境で起動する必要があります。

答えて

2

すべて DBスキーマとプリペアドテーブルの値を含むコードは、両方ともソース管理と継続的な統合の対象にする必要があります。私は、ソース管理が使われているが、DBではなく、多くのプロジェクトを見てきました。代わりに、誰もが変更を同時に行っているマスターデータベースインスタンスがあります。これにより分岐を行うことが不可能になり、システムの初期の状態を再現することも不可能になります。

データベーススキーマの処理にVisual Studio 2010 Premiumの機能を使用することを非常に好きです。これにより、プロジェクトスキーマの一部であるデータベーススキーマが、ソース管理下のマスタースキーマになります。新しいデータベースはプロジェクトのすぐ外に作成できます。既存のデータベースを新しいスキーマに移すためのアップグレードスクリプトが自動的に生成されます。

VS2010プレミアムを持たないデータベースや同様のツールを使用しているデータベースでは、変更管理を適切に行うことは、可能な限り、苦痛を伴うことがあります。あなたがそのツールサポートを持っていない場合、私はあなたの同僚を理解することができます。 CIにDBを含めることに問題がある場合は、最初にDB作業のための下級ツールセットを取得するオプションですか?適切なツールがあれば、それをCIに組み込むのは自然なステップです。

+0

私は、ツールなしでdbの移行を行うための多くのオプションがあると思います。 FluentMigrator、増分アップグレードスクリプトなどがあります。 K Scott Allenには、これについて語る良い記事があります。 – jcollum

0

が実際に存在しない場合、継続的な統合はありません。これは、ソフトウェアを実行するために必要なすべてのコンポーネントがCIの一部でなければならないことを意味します。そうでなければ、ソース管理よりも少し洗練されていますが、実際のCIのメリットはありません。

CIのデータベースがないと、特定のバージョンのアプリケーションにロールバックすることはできず、実際の、常に完全な環境でテストを実行することはできません。

もちろん、簡単な問題ではありません。私が働いているプロジェクトでは、alterスクリプトを使用して、ソースコードの変更とともにチェックインする必要があります。これらのスクリプトは、現在のビルドの正確さだけでなく、1つのバージョンのアップグレード/ダウングレードが可能であることを保証するために、テストデータベース上で実行され、更新プロセス自体が何かを混乱させることはありません。私はこれがデータベース全体を削除して再作成するよりも優れたソリューションだと考えています。データベースを段階的にアップグレードするための一貫性のあるパスを持ち、何らかのテスト環境(データ、ユーザーなど)でデータベースを使用できます。

関連する問題