質問

継続的な統合サーバーがあるとします。チェックインすると、ポストフックが最新のコードを取得し、テストを実行し、すべてをパッケージ化します。データベースの変更も自動化する最良の方法は何ですか?

理想的には、データベースをゼロから構築するか、自動同期方法を使用して既存のデータベースを更新するインストーラーを構築します。

役に立ちましたか?

解決

データベース管理とデータベース作成プロセス全体を定義および制御する機会がある場合は、 DB Ghost -それは単なるツールではなく、プロセスです。

それが好きで実装できるなら、あなたはそれで大きな利益を得ます-しかし、それは少し「すべてか無か」です;アプローチの種類。推奨。

他のヒント

最近記事、これは役に立つかもしれません。

著者は、テスト、処理、自動化など、継続的な統合のベストプラクティスをいくつか説明しました。

重要なポイントは次のとおりです:

  • 多くのショップでは、コードはコミットの時点で単体テストされています。データベースの場合、テストステップの一部として、開発に対して、QAデータベースに対してすべてのユニットテストを一度に順番に実行することをお勧めします
  • テストステップは、CI / CDプロセスの重要な部分です。ユニットテスト自体を含むテストスクリプトもソース管理でバージョン管理し、ビルドステップの時点で抽出して実行する必要があります
  • 本番環境からデータをプルすることは迅速な手段として魅力的ですが、決して良い考えではありません
  • 最良のアプローチは、ツールまたはスクリプトを使用して、トランザクションテーブルの合成テストデータをすばやく、繰り返し、確実に作成することです
  • ユニットテストを実行して、人間が消費する要約結果を手動で生成することは、自動化の目的に反します。自動化されたプロセスを中断、分岐、および/または続行できるようにするマシンで読み取り可能な結果が必要です。
  • すべてのテストに100%合格する必要があるCIプロセスの実行は、失敗時に停止するようにワークフローパイプラインがアトミックに設定されている場合、CIをまったく持たないことに似ています。針に糸を通すには、テストにしきい値が組み込まれている必要があります。これは、失敗したテストの割合に基づいて、または特定の高優先度テストが失敗した場合にエラーを発生させます。
  • すべてのプロセスは最終的に合格または不合格のブール結果を生成する必要がありますが、一部の自動化されていないプロセスは、CIワークフローパイプラインへの道を簡単に見つけることができます(ユニットテストなど)。ソフトウェアは任意のワークフローパイプラインにプラグアンドプレイし、既知の入力を取得して期待される出力を生成する必要があります–合格、失敗など。
  • CI / CDプロセスは失敗すると中止され、パイプラインのサイクルを継続するのではなく、通知メールがすぐに送信されます。
  • CIのプロセスは、最後のビルドのエラーが修正されるまで再び繰り返されるべきではありません。障害が発生した場合、チーム全体が障害通知を取得する必要があります。これには、可能な限り障害の詳細が含まれます。
  • パイプラインがすべてのテストを含めて、開始から終了、完了まで1時間かかる場合、すべてのビルド間隔を1時間以上に設定し、すべての新しいコミットをキューに入れて、次のコミットに適用する必要がありますビルドします。
  • 自動化スクリプトにはプレーンテキストのパスワードは存在しません

dbバックアップを開発成果物として使用することには注意します。ほとんどのCIベストプラクティスでは、スキーマ、プロシージャ、トリガー、およびビューをファーストクラスの開発成果物として管理することをお勧めします。副作用は、これをさらに一歩進めて、必要なときにいつでも新しいデータベースを構築するために使用できることです。理想的には、データベースにプッシュできるデータもあります。

ここに足を濡らすためのクリフノートバージョンがありますが、このスペースにはたくさんのものがあります:   http://www.infoq.com/news/2008/02/versioning_databases_series

スコット・アンブラーがここに持っているアイデアのいくつかも好きです。サイトは良いのですが、本はこのような難しい一連の問題について驚くほど深いです。 http://www.agiledata.org/ http://www.amazon.com/exec/obidos/ASIN/0321293533/ambysoftinc

Red Gateは非常に堅牢なソリューションであり、そのまま使用できます。 しかし、最良の点は、継続的な統合プロセスと統合できることです。 MsbuildとHudsonで使用します。 仕組みを簡単に説明します。 http://blog.vincentbrouillet.com/post / 2011/02/10 / Database-schema-synchronisation-with-RedGate

これについてさらに知る必要がある場合は、お気軽にお問い合わせください

SQLソース管理とSQL Compare Proコマンドラインを使用したRed Gateアプローチの詳細については、次のコードサンプルを参照してください。 http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf

Troy Huntは、「SQL Serverデータベースの継続的な統合」というタイトルのSimple Talkに関する記事を書きました。 http://www.simple-talk.com/content/article.aspx ?article = 1247

FluentMigrator を見ましたか?デフォルトのダウンロードには、CIに簡単に追加できるNantスクリプトが含まれています。無料のオープンソースで使いやすい。さまざまなデータベースに対応しています。

DB Ghostの最新バージョン(5.0)は、「非ASCII文字」の影響を受けません。問題(ファイルがUTF8でエンコードされていることを意味します)そして、必要なことを正確に行えるはずです。

また、必要に応じて、ツールを実際にスタンドアロンで使用してさまざまな機能(スクリプト作成、構築、比較、アップグレード、パッケージ化)を実行することができます。それらをすべて一緒に使用すると、完全なエンドツーエンドプロセスが提供されるため、全体の値がその部分の合計よりも大きい。

本質的に、スキーマに変更を加えるには、“ 1日目”を開発しているように、ソース管理下にある個々のオブジェクト作成スクリプトとテーブルごとの挿入スクリプト(参照データ用)を更新しますグリーンフィールドデータベース。 DB Ghostツールを使用して、これらのスクリプトを最新のデータベースに構築し(必要に応じて継続的統合を使用)、運用データベースのコピーであるターゲットデータベースを比較およびアップグレードすることにより、全体を有効にします。このプロセスにより、稼働中に実際の本番データベースで使用できるデルタスクリプトが生成されます。

Visual Studioデータベースプロジェクトを作成して、現在お持ちのソリューションに追加することもできます。

マルク

この投稿は古いことは知っていますが、次のアプローチを取る新しいソリューションがあります:

  1. 開発者は個々のSQL変更をスクリプト化し、ソースにコミットします コントロール。
  2. プログラム( OneScript )は、変更スクリプトファイルを     ソース管理、それらのフィルタリングとソート、および単一の     リリーススクリプトファイル。
  3. その後、そのリリーススクリプトファイルが         リリースを行うデータベース。

当社のホームページこちらでは、このプロセスについて詳しく説明し、これらを実行する例へのリンクを掲載しています。 Subversionフックから自動的にステップします。そのため、コミット後すぐに、開発者はリリースが成功したかエラーがあったかを知らせるメールを受け取ります。 PowerScriptコードが含まれています。

免責条項-私はOneScriptを作っている会社で働いています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top