Latar Belakang
Saya sedang berupaya menciptakan proses pengembangan baru untuk tim web kecil yang terdiri dari sekitar 4 programmer dan 4 desainer, dengan potensi yang jelas untuk menumbuhkan tim di masa depan. Produk kami adalah aplikasi utama yang mendukung situs web klien yang juga kami desain dan host.
Sebelumnya, kami semua bekerja melalui FTP pada server dev, dengan database dev tunggal. Itu "bekerja" * untuk sementara waktu, tetapi kami bergerak ke arah yang baru, jadi sekarang saatnya untuk mematangkan proses kami.
Kami menggunakan Percona Server 5.5, tetapi ini haruslah agnostik basis data, dengan gagasan menjaga biaya tetap rendah.
Tujuan :
Saya melihat ke dalam menciptakan proses integrasi berkelanjutan (CI) untuk pengembangan database dengan pemikiran sebagai berikut:
- Pengembang memiliki salinan data lokal untuk menjalankan kode pengembangan
- Dapat mengembalikan struktur database ke perubahan sebelumnya
- Dapat memisahkan perubahan skema fitur baru vs perubahan perbaikan desain skema
- Mampu mengubah struktur basis data secara lokal untuk pengujian
Konsep Awal
Saya telah membuat sketsa proses di bawah ini menggunakan SVN dan LiquiBase, meskipun itu benar-benar menghapus #4
.
- buat cabang 'development' dari trunk
- pusat 'pengembangan' db server lari dari cabang 'pengembangan'
- pengembang lokal ditetapkan sebagai budak ke cabang pengembangan (menyediakan di
#1
atas)- perubahan liquibase dilakukan secara teratur ke cabang pengembangan, yang mengeksekusi kait pasca-komitmen untuk memperbarui basis data pengembangan pusat (yang akan mengalir ke mesin lokal yang berjalan sebagai budak ke server pengembangan ini) (liquibase menyediakan di
#2
atas)- ketika fitur atau perbaikan skema siap untuk menuju ke QA, DBA (saya) akan menggabungkan perubahan yang sesuai dari cabang pengembangan menjadi trunk. Tindakan ini akan membuat skrip sql untuk diterapkan ke server basis data pementasan.
- Staging server harus mencerminkan TRUNK, yang harus memiliki struktur yang sama dengan Produksi, ditambah perubahan yang ada di QA
- setelah mengeksekusi skrip sql pada server staging, lakukan beberapa QA pada perubahan.
- Jika semua terlihat bagus, TAG strukturnya. Ini akan menghasilkan skrip .sql untuk dijalankan dalam produksi secara manual oleh DBA (untuk jam-jam di luar jam sibuk jika diperlukan)
Proses ini mengharuskan semua pengembang menjalankan cabang 'pengembangan' yang sama, artinya hanya ada satu versi skema database pada waktu tertentu (tidak yakin bahwa saya menginginkan ini).
Ini juga berarti bahwa setiap perubahan pada skema tidak dapat diuji secara lokal dan dapat mempengaruhi pengembang lain jika tidak dilakukan dengan benar. Di lingkungan kami, pengembang mungkin menambahkan tabel baru tetapi jarang memodifikasi struktur yang ada. Sebagai DBA, perbaikan desain dilakukan oleh saya. Tetapi ketidakmampuan untuk menguji perbaikan secara lokal adalah kegagalan terbesar saya dari proses.
Bagaimana proses di atas dapat diubah untuk memungkinkan pengembangan lokal, sambil tetap mempertahankan salinan data yang relatif terbaru (sebagaimana disediakan oleh replikasi dalam proses yang saya usulkan)? Saya tidak memerlukan data terkini hingga minggu lalu.
* Dengan 'berhasil', maksud saya sudah cukup tetapi adalah PITA.