tingkatkan strategi penerapan kami


12

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?

Jawaban:


6

Saran saya untuk melakukan rilis adalah memiliki Siaran Fitur dan Siaran Pemeliharaan. Rilis Fitur akan menjadi rilis yang mendapatkan fitur baru. Ini bisa ditambahkan ke bagasi subversi Anda. Ketika Anda berpikir ini adalah fitur lengkap, Anda menaburnya ke cabang rilis. Setelah proses QA Anda puas dengan rilis ini, Anda menandai rilis dan menyebarkan kode ke server Anda.

Sekarang, ketika Anda mendapatkan laporan bug, Anda melakukan perbaikan ini ke cabang dan mengirimkannya ke bagasi. Saat Anda puas dengan jumlah bug yang diperbaiki, Anda dapat menandai dan menggunakan Rilis Pemeliharaan.

Penting bahwa Anda memiliki cabang basis kode langsung Anda (atau memiliki kemampuan untuk membuatnya dengan mengetahui revisi langsung) yang terpisah dari cabang pengembangan Anda, sehingga Anda memiliki kemampuan untuk menyebarkan perbaikan ke kode langsung Anda tanpa harus menyebarkan fitur baru atau kode yang belum diuji.

Saya akan merekomendasikan menggunakan sistem pengemasan asli distribusi Anda untuk menyebarkan kode baru. Jika Anda memiliki paket yang berisi semua basis kode Anda, Anda tahu semua kode Anda telah dikerahkan dalam semacam operasi atom, Anda dapat melihat versi apa yang diinstal sekilas, dapat memverifikasi basis kode Anda menggunakan paket Anda checksumming. Rolling kembali hanya kasus menginstal versi paket yang sebelumnya diinstal.

Satu-satunya penghalang yang dapat saya lihat untuk Anda terapkan adalah Anda tampaknya memiliki banyak salinan basis kode untuk pelanggan berbeda yang berjalan di satu server. Saya akan mencoba mengatur kode Anda sehingga semua pelanggan menjalankan file yang sama dan tidak menggunakan salinan. Saya tidak tahu betapa mudahnya bagi Anda, tetapi mengurangi jumlah salinan yang harus Anda tangani akan secara besar-besaran mengurangi sakit kepala Anda.

Saya berasumsi bahwa seperti yang Anda sebutkan LAMP, Anda menggunakan PHP atau bahasa skrip lain, yang tidak memerlukan proses kompilasi. Ini berarti Anda mungkin kehilangan proses luar biasa yang disebut Integrasi Berkelanjutan. Apa artinya ini pada dasarnya adalah bahwa kode Anda terus diuji untuk memastikan kode itu masih dalam keadaan dapat dirilis. Setiap kali seseorang memeriksa kode baru, suatu proses mengambilnya dan menjalankan proses pembuatan dan pengujian. Dengan bahasa yang dikompilasi Anda biasanya akan menggunakan ini untuk memastikan kode masih dikompilasi. Dengan setiap bahasa Anda harus mengambil kesempatan untuk menjalankan tes unit (kode Anda dalam unit yang dapat diuji bukan?) Dan tes integrasi. Untuk situs web, alat yang bagus untuk menguji tes integrasi adalah Selenium. Dalam Java build kami, kami juga mengukur cakupan kode dan metrik kode untuk melihat bagaimana kami berkembang dari waktu ke waktu. Server CI terbaik yang kami temukan untuk Java adalah Hudson, tetapi sesuatu seperti buildbot mungkin bekerja lebih baik untuk bahasa lain. Anda dapat membangun paket menggunakan server CI Anda.


Terima kasih. ya kita menggunakan PHP. Saya harus mengakui bahwa saya tidak terlalu mengandalkan integrasi berkelanjutan, dari apa yang saya tahu sangat mirip dengan pengujian unit tetapi saya tidak tahu lebih banyak tentang itu. Kami tertarik pada pengujian unit tetapi basis kode kami masih memiliki banyak kode prosedural warisan yang tidak benar-benar cocok untuk pengujian unit. beberapa ide menarik, akan lebih baik untuk mendengar ide yang Anda miliki tentang bagaimana kode kami dapat diatur dengan lebih baik untuk mencegah replikasi.
robjmills

integrasi berkelanjutan secara harfiah hanya menjalankan pengujian otomatis pada setiap checkin atau setiap jam atau setiap hari. Selama Anda melakukannya secara teratur dan otomatis, itu cukup banyak CI.
David Pashley

saya melihat artikel ini hari ini tentang menggunakan Hudson bersama PHP dan Phing - toptopic.wordpress.com/2009/02/26/php-and-hudson
robjmills

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.