Saya kesulitan mencari contoh yang baik tentang cara mengelola skema basis data dan data antara server pengembangan, pengujian, dan produksi.
Inilah pengaturan kami. Setiap pengembang memiliki mesin virtual yang menjalankan aplikasi kami dan database MySQL. Ini adalah kotak pasir pribadi mereka untuk melakukan apa pun yang mereka inginkan. Saat ini, pengembang akan membuat perubahan pada skema SQL dan melakukan dump database ke file teks yang mereka komit ke dalam SVN.
Kami ingin menggunakan server pengembangan integrasi berkelanjutan yang akan selalu menjalankan kode terbaru. Jika kita melakukannya sekarang, itu akan memuat ulang database dari SVN untuk setiap build.
Kami memiliki server uji (virtual) yang menjalankan "rilis kandidat." Menyebarkan ke server uji saat ini adalah proses yang sangat manual, dan biasanya melibatkan saya memuat SQL terbaru dari SVN dan mengubahnya. Juga, data pada server uji tidak konsisten. Anda berakhir dengan data uji apa pun yang dilakukan pengembang terakhir di server sandbox-nya.
Di mana semuanya rusak adalah penyebaran produksi. Karena kami tidak dapat menimpa data langsung dengan data uji, ini melibatkan pembuatan ulang secara manual semua perubahan skema. Jika ada banyak perubahan skema atau skrip konversi untuk memanipulasi data, ini bisa menjadi sangat berbulu.
Jika masalahnya hanya skema, itu akan menjadi masalah yang lebih mudah, tetapi ada "basis" data dalam database yang diperbarui selama pengembangan juga, seperti meta-data dalam tabel keamanan dan izin.
Ini adalah penghalang terbesar yang saya lihat dalam bergerak menuju integrasi berkelanjutan dan pembangunan satu langkah. Bagaimana Anda mengatasinya?
Pertanyaan tindak lanjut: bagaimana Anda melacak versi database sehingga Anda tahu skrip mana yang harus dijalankan untuk memutakhirkan instance database yang diberikan? Apakah tabel versi seperti Lance menyebutkan di bawah prosedur standar?
Terima kasih untuk referensi ke Tarantino. Saya tidak berada dalam lingkungan .NET, tetapi saya menemukan halaman wiki DataBaseChangeMangement mereka sangat membantu. Terutama Presentasi Powerpoint ini (.ppt)
Saya akan menulis skrip Python yang memeriksa nama *.sql
skrip dalam direktori yang diberikan terhadap tabel dalam database dan menjalankan skrip yang tidak ada di sana berdasarkan pada bilangan bulat yang membentuk bagian pertama dari nama file. Jika ini adalah solusi yang cukup sederhana, seperti yang saya duga, maka saya akan mempostingnya di sini.
Saya punya skrip yang berfungsi untuk ini. Ini menangani inisialisasi DB jika tidak ada dan menjalankan skrip upgrade seperlunya. Ada juga sakelar untuk menghapus database yang ada dan mengimpor data uji dari file. Itu sekitar 200 baris, jadi saya tidak akan mempostingnya (meskipun saya mungkin meletakkannya di pastebin jika ada minat).