6

Visual Studio Sql Server Data tools データベース プロジェクトを使用して、異なるパブリッシュ プロファイルに対して異なるシード データ セットをデプロイすることは可能ですか?

デプロイ後スクリプトを使用してシード データをデプロイできることはわかっています。パブリッシュ プロファイル機能を使用して、さまざまな環境にデプロイできることがわかっています。私たちが知らないのは、さまざまなシード データをさまざまな環境に展開する方法です。

なぜ私たちはこれをしたいのでしょうか?

  • 単体テスト用のシード データの小さな明示的なセットを取得できるように、これを実行できるようにしたいと考えています。
  • テスト チームがアプリケーション全体をテストするために、テスト チームの環境にデプロイするためのより広範なデータ セットが必要です。
  • 本番環境前の特定のシード データ セットが必要です。
4

2 に答える 2

8

これを実現する方法はいくつかあります。最初の方法は、デプロイ後のスクリプトで環境を確認することです。..

if @@servername = 'dev_server'
begin
   insert data here
end

少しきれいなバージョンは、環境ごとに異なるスクリプト ファイルを用意し、:r import sqlcmd スクリプトを介してそれらをインポートすることです。

  • PostDeploy.sql
  • DevServer.sql
  • QAServer.sql

それから

if @@servername = 'dev_server'
begin
   :r DevServer.sql
end
if @@servername = 'qa_server'
begin
   :r QAServer.sql
end

.sql ファイルへのパスが正しいことを確認し、それらを dacpac でコピーする必要があります。

@@servername を使用する必要はありません。sqlcmd 変数を使用して環境ごとに渡すことができます。これは、ハードコードされたサーバー名よりも少しきれいです。

2 番目のアプローチは、dacpac を変更して、ポスト delpoy スクリプトを環境固有のものに変更することです。これは私の好みであり、CI ビルドの一部として最適に機能します。私のプロセスは次のとおりです。

  1. チェックインの変更
  2. ビルド サーバーは dacpac をビルドします
  3. ビルドには dacpac が必要で、dev、qa、prod などの env フォルダーにコピーします
  4. ビルドは、それぞれのデプロイ後のスクリプトを環境固有のスクリプトに置き換えます

スクリプト PostDeploy.dev.sql、PostDeploy.Qa.sql などを呼び出し、ビルド アクションを「なし」に設定するか、「スクリプト、ビルドではありません」として追加します。

デプロイ後のスクリプトを置き換えるには、.net Packaging API を使用するだけです。いくつかの例については、それを行う Dir2Dac デモをご覧ください。

https://github.com/GoEddie/Dir2Dac

すなわち:

https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs

var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");

     using (var reader = new StreamReader(_postDeployScript))
     {
                reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
     }
于 2015-11-16T11:18:09.033 に答える
2

プロジェクトファイルのExecコマンドによって、公開時に自動的に実行されるPowershellスクリプトを作成することで、これを解決しました。

プロジェクト内のフォルダーにあるすべてのスクリプトを含むスクリプト ファイルが作成されます (フォルダーはターゲット環境のような名前が付けられます)。

このスクリプトは、デプロイ後のスクリプトに含まれます。

于 2015-11-18T12:20:33.307 に答える