Kami memiliki aplikasi e-niaga yang kami kembangkan di perusahaan kami. Ini adalah aplikasi LAMP yang cukup standar yang telah kami kembangkan selama sekitar 3 tahun. Kami mengembangkan aplikasi pada domain pengujian, di sini kami menambahkan fitur baru dan memperbaiki bug, dll. Pelacakan bug dan pengembangan fitur kami semua dikelola dalam solusi subversi yang di-host (unfuddle.com). Karena bug dilaporkan, kami melakukan perbaikan pada domain pengujian dan kemudian melakukan perubahan pada svn ketika kami senang bug tersebut telah diperbaiki. Kami mengikuti prosedur yang sama dengan penambahan fitur baru.
Perlu menunjukkan arsitektur umum sistem dan aplikasi kami di seluruh server kami. Setiap kali fitur baru dikembangkan, kami meluncurkan pembaruan ini ke semua situs menggunakan aplikasi kami (selalu server yang kami kontrol). Setiap situs menggunakan sistem kami pada dasarnya menggunakan file yang persis sama untuk 95% dari basis kode. Kami memiliki beberapa folder dalam setiap situs yang berisi file yang dipesan lebih dahulu ke situs tersebut - file css / gambar dll. Selain itu, perbedaan antara setiap situs ditentukan oleh berbagai pengaturan konfigurasi dalam setiap basis data situs.
Ini sampai ke penyebaran yang sebenarnya. Ketika dan ketika kami siap untuk meluncurkan pembaruan dari beberapa jenis kami menjalankan perintah di server tempat situs pengujian aktif. Ini melakukan perintah salin (cp -fru / testsite / / othersite /) dan melewati setiap kekuatan vhost memperbarui file berdasarkan tanggal yang dimodifikasi. Setiap server tambahan tempat kami host memiliki vhost yang kami rsync basis kode produksi dan kami kemudian mengulangi prosedur salin di semua situs di server itu. Selama proses ini kami memindahkan file yang tidak ingin kami timpa, memindahkannya kembali ketika salinannya selesai. Skrip peluncuran kami melakukan sejumlah fungsi lain seperti menerapkan perintah SQL untuk mengubah setiap basis data, menambahkan bidang / tabel baru dll.
Kami menjadi semakin khawatir bahwa proses kami tidak cukup stabil, tidak toleran terhadap kesalahan dan juga sedikit metode brute-force. Kami juga sadar bahwa kami tidak menggunakan subversi sebaik-baiknya karena kami memiliki posisi di mana mengerjakan fitur baru akan mencegah kami meluncurkan perbaikan bug yang penting karena kami tidak menggunakan cabang atau tag. Tampaknya juga salah bahwa kami memiliki begitu banyak replikasi file di server kami. Kami juga tidak dapat dengan mudah melakukan kemunduran pada apa yang baru saja diluncurkan. Kami melakukan diff sebelum peluncuran masing-masing sehingga kami bisa mendapatkan daftar file yang akan diubah sehingga kami tahu apa yang telah berubah setelah tetapi proses untuk rollback masih bermasalah. Dalam hal basis data, saya mulai mencari ke dalam dbdeploy sebagai solusi potensial. Yang benar-benar kita inginkan adalah beberapa panduan umum tentang bagaimana kita dapat meningkatkan manajemen dan penyebaran file kita. Idealnya kami ingin manajemen file lebih dekat dengan repositori kami sehingga rollout / rollback akan lebih terhubung ke svn. Sesuatu seperti menggunakan perintah ekspor untuk memastikan file situs sama dengan file repo. Akan lebih baik meskipun jika solusinya mungkin juga akan menghentikan replikasi file di server kami.
Mengabaikan metode kita saat ini, akan sangat bagus untuk mendengar bagaimana orang lain mendekati masalah yang sama.
untuk meringkas ...
- Apa cara terbaik untuk membuat file di beberapa server tetap sinkron dengan svn?
- Bagaimana kita mencegah replikasi file? symlink / sesuatu yang lain?
- Bagaimana seharusnya kita menyusun repo kita sehingga kita dapat mengembangkan fitur baru dan memperbaiki yang lama?
- Bagaimana seharusnya kita memicu rollout / rollback?
Terima kasih sebelumnya
EDIT:
Saya telah membaca banyak hal baik baru-baru ini tentang penggunaan Phing dan Capistrano untuk tugas-tugas semacam ini. Adakah yang bisa memberikan info lebih lanjut tentang mereka dan seberapa baik mereka untuk tugas semacam ini?