私たちは1つのレガシーフレームワークに取り組んでおり、それは継続的に進化しています。
問題1:誰かが最新のコードでアプリケーションを実行したい場合、その人はそうするのに多くの時間を費やします(誰かがコードをコミットするのを忘れたり、部分的なコードをコミットするなど)。
解決策:Jenkinsの使用を開始し、それをSVNリポジトリと統合しました。これで、常に機能するコードができました。私たちは、誰でも(特に新しい開発者)が非常に短い時間でアプリケーションを使い始めることができると考えました。
問題2:すぐに、コードではなくデータベースの変更(新しいテーブルの追加、既存のテーブルの変更、データベースの変更など)bootstrapスクリプト)で開発者の時間がかかることがわかりました。
私の質問は、Jenkinsなどの自動化ツールを使用して、コードの変更(現在は実行可能)とデータベースの変更(実行方法がわからない)をテストサーバーに展開する方法です。
最も一般的と思われるアプローチは、スキーマと参照データのバージョンを追跡するテーブルをデータベースに作成することです。このバージョンをDBMSのバージョンと混同しないでください。次に、スキーマを段階的に変更してそのテーブルを更新するスクリプトを作成します。バージョンa
からバージョンc
に移行するには、b
、次にc
のスクリプトを実行します。これは、かなり簡単に自動化できます。
また、起動時にスキーマバージョンを確認し、同期していない場合はフェイルファストするチェックをコードに追加することをお勧めします。
私のチームは現在、データベース変更の継続的な統合/展開のために RedGateのSQL変更自動化ツール を検討しています。データベースのCI/CDに対する準備が整った唯一の回答のようですが、もちろん他の人を見逃した可能性もあります。
SQL SSDT も使用しました。これは厳密にはCI/CDではありませんが、DBデプロイスクリプトを作成する手間を大幅に軽減します。 (MSは実際にRedGate製品からSSDTを吸収したと思います。)