web-dev-qa-db-ja.com

継続的デリバリーのためにデータベーススクリプトを維持する方法は?

私たちは1つのレガシーフレームワークに取り組んでおり、それは継続的に進化しています。

問題1:誰かが最新のコードでアプリケーションを実行したい場合、その人はそうするのに多くの時間を費やします(誰かがコードをコミットするのを忘れたり、部分的なコードをコミットするなど)。

解決策:Jenkinsの使用を開始し、それをSVNリポジトリと統合しました。これで、常に機能するコードができました。私たちは、誰でも(特に新しい開発者)が非常に短い時間でアプリケーションを使い始めることができると考えました。

問題2:すぐに、コードではなくデータベースの変更(新しいテーブルの追加、既存のテーブルの変更、データベースの変更など)bootstrapスクリプト)で開発者の時間がかかることがわかりました。

私の質問は、Jenkinsなどの自動化ツールを使用して、コードの変更(現在は実行可能)とデータベースの変更(実行方法がわからない)をテストサーバーに展開する方法です。

2
Bhushan

最も一般的と思われるアプローチは、スキーマと参照データのバージョンを追跡するテーブルをデータベースに作成することです。このバージョンをDBMSのバージョンと混同しないでください。次に、スキーマを段階的に変更してそのテーブルを更新するスクリプトを作成します。バージョンaからバージョンcに移行するには、b、次にcのスクリプトを実行します。これは、かなり簡単に自動化できます。

また、起動時にスキーマバージョンを確認し、同期していない場合はフェイルファストするチェックをコードに追加することをお勧めします。

この戦略を実装する flyway などの tools があり、自分で何かを作成する前にそれらを確認する必要があります。

2
JimmyJames

私のチームは現在、データベース変更の継続的な統合/展開のために RedGateのSQL変更自動化ツール を検討しています。データベースのCI/CDに対する準備が整った唯一の回答のようですが、もちろん他の人を見逃した可能性もあります。

SQL SSDT も使用しました。これは厳密にはCI/CDではありませんが、DBデプロイスクリプトを作成する手間を大幅に軽減します。 (MSは実際にRedGate製品からSSDTを吸収したと思います。)

0
Max Cascone