はじめに
これはVisual Studio Team Servicesのアドベントカレンダー10日目の記事です。
CI/CDといえば、プログラムが主ですが、データベースにデプロイするときはどうしているでしょうか。Visual Studio 2017 Enterpriseに付属するReadyRollを使ってCI/CDをやってみましょう。Re
なお、VS2017に付属するReadyRollはCoreエディションなので、一部機能のみですが、SQLに対するIntelliSenceとかは使えます。SSDTに内蔵されているものよりも高機能に見えます。
Pro/Communityエディション向けには体験版が用意されています。
ReadyRollはSQL Server(SQL Database)専用ですが、開発しているRedGate社はMySQLやOracle DBに対応した製品も販売しているようです。
RedGate ReadyRollとEntity Frameworkの違い
データベースの管理ではないですが、移行をサポートしたものとしてすぐに思いつくのはEntity FrameworkのCode Firstとの違いです。以前も書いたのでこちらをみてください。
ただ、VSTSと組み合わせると結構便利なこともあります。ちょっと見てみましょう。
拡張機能の追加
まず、対象のVSTSにReadyRoll拡張機能を追加します。この拡張機能そのものは無償です。ライセンスはあくまでもクライアントのみにかかるようです。追加すると、ReadyRollのビルドタスクが表示されます。
ビルド定義を作る
ReadyRollには専用のビルド定義が用意されています。こちらを選びます。
こんな感じのビルド定義が用意されています。当然ですが、ビルドエージェントにはHosted VS2017か、Visual Studio 2017 Enterpriseがインストールされているプライベートエージェントをプールを選んでください。
ターゲットのSQL Server(Database)を選んで接続情報を指定します。余談ですが、パスワードはAzure Key Vaultを使うこともできます。
Variable GroupにKey Vaultを指定します。
Key Vaultに登録したVariable Groupを参照しておけば、ビルド定義内でKey Vaultに登録しているパスワードをビルド内変数として参照できます。
Visual StudioのビルドタスクもReadyRollように調整されています。ビルドを実行してみましょう。
VSTSにReadyRoll拡張機能をインストールすると、Database diff scriptとDatabase scriptという項目ができています。ReadyRollプロジェクトをビルドすると、ここに表示されます。このキャプチャを取った11/26時点ではWindows 10 Fall Creators UpdateのEdgeではここが表示されないようで、Chromeでキャプチャを取りました。
データベースに対して実行したスクリプトも表示されます。
ReadyRollでリリース
ビルドができたら次はリリースです。
リリースでの成果物(Artifact)にReadyRollのビルド定義を指定します。
リリースのタスクにReadyRoll deploy Database Packageがあるので、選択します。
ビルドパッケージにはReadyRollで生成されたPowerShellスクリプトを指定します。
このように、リリースも正常に行われています。
Visual Studioでの注意事項
Visual StudioでReadyRollのプロジェクトを作ったときデプロイ先によって、プロジェクトのこの設定を変更してください。
特にSQL DatabaseとSQL Serverでは使えるSQLに差があります。具体的にはuse命令がSQL Databaseでは使えないので、SQL ServerのままだとSQL Databaseへのデプロイに失敗します*1。
まとめ
ReadyRollを使った基本的なデプロイまで紹介しました。もちろん一回のデプロイで終わるわけはなく、継続的にリリースするときにはいろいろ考慮することがありますが、もうちょっと使いこなしてみて紹介できればと思います。
*1:最初これに気づかなかった…