Saya baru saja berada di sebuah proyek dan selama rilis, kami menyadari bahwa itu tidak bekerja di Produksi. Ia bekerja di semua lingkungan lain tetapi karena kami memiliki tim rilis yang terpisah, dan kami tidak dapat mengatur sendiri server dan lingkungan, kami tidak memiliki visibilitas konfigurasi pada mereka.
Kami mencurigai bahwa Prod memiliki beberapa izin pengguna di akun atau pengaturan IIS yang berbeda, jadi kami bekerja sekarang.
Jadi saya pikir semua ini telah menjadi pengalaman belajar bagi saya dan saya tidak ingin hal yang sama terulang lagi. Saya ingin bertanya, bagaimana perbedaan lingkungan ini? Saya selalu berpikir bahwa PreProd harus merupakan salinan yang identik dengan lingkungan Prod menggunakan salinan dari database yang sama, menggunakan salinan akun pengguna yang sama, harus diinstal pada server yang sama dll.
Tapi sejauh mana saya harus mengambilnya? Jika situs web menghadap ke luar, haruskah PreProd menghadap ke luar? Bagaimana jika situs web memiliki komponen yang tidak memerlukan akun pengguna atau kata sandi untuk menavigasi? Apakah saya tetap bisa mengeksposnya ke dunia luar?
sumber
Jawaban:
Anda tentu harus menguji pada lingkungan yang identik dengan penghubung produksi Anda sejauh mungkin. Jika tidak, Anda tidak menguji apa yang akan digunakan pelanggan. Jika tidak ada yang lain, Anda perlu lingkungan seperti itu untuk menguji laporan bug apa pun.
Tentunya akan ada hal-hal yang tidak Anda inginkan identik - tautan ke sistem pembayaran muncul dalam pikiran, tetapi ini harus diejek seolah-olah itu adalah hal yang nyata . Ada juga hal-hal yang tidak dapat Anda tiru - skala sistem.
Anda mungkin ingin menguji melalui URL eksternal - lagi-lagi Anda menguji apa yang akan dilihat pengguna Anda. Pengujian juga melalui URL eksternal akan menggunakan jaringan dengan cara yang berbeda dengan penggunaan internal sistem. Izin (misalnya) akan berperan sebagai bandwidth yang tersedia, firewall, dll. Semua pengguna akan menghadapi tetapi Anda akan melewatkan jika Anda mengakses sistem secara langsung.
Saya tidak melihat masalah dengan komponen yang tidak memerlukan akun dan kata sandi. Jika tidak memerlukan kata sandi maka itu tidak penting / sensitif, jika itu sensitif maka mengapa belum mendapat kata sandi?
sumber
Saya pikir praktik terbaik untuk ini adalah pendekatan Penyebaran Green Green, yang diciptakan oleh Jez Humble dan David Farley dalam buku mereka Continuous Delivery dan dijelaskan oleh Martin Fowler dalam posting blognya Blue Green Deployment .
Premisnya sangat sederhana. Dari pos Martin Fowler:
Pendekatan ini akan menyelesaikan masalah Anda karena tidak memiliki lingkungan pra-produksi dan produksi yang identik, serta mengoptimalkan strategi penempatan Anda.
sumber
Lingkungan pra-produksi akhir kami hanyalah salah satu server langsung yang dikeluarkan dari load balancer. Kami menggunakan praproduksi build kami (yang pada dasarnya identik dengan live build terpisah dari string koneksi database dan beberapa perubahan konfigurasi lainnya) dan mengujinya. Jika tidak apa-apa, kami menyebarkan kode langsung, dan akhirnya jika itu terbukti ok, kami mengembalikan server ke load balancer dan menyebarkan build produksi ke server yang tersisa satu-per-satu.
sumber
Mereka harus semirip mungkin, sehingga Anda dapat mengidentifikasi masalah di setiap titik dalam sistem, dengan kemungkinan pengecualian dari ketidakmampuan untuk skala. Jika memungkinkan, satu-satunya perbedaan antara lingkungan produksi Anda dan lingkungan pra-produksi / staging / pengujian adalah ukurannya - saya berharap lingkungan produksi terdiri dari lebih banyak mesin dalam lingkungan skala besar. Anda bahkan harus mencerminkan dedikasi mesin yang Anda miliki, seperti server database, server web, dan sebagainya.
Namun, replikasi yang tepat mungkin tidak dapat dilakukan sesuai anggaran Anda saat ini. Semakin dekat, pengujian akan lebih efektif dan masalah yang semakin kecil kemungkinan akan muncul selama dorongan untuk produksi.
Saya mengambil sikap berbeda dari ChrisF tentang apakah lingkungan ini harus menghadap publik. Saya katakan itu tidak seharusnya. Saya akan memilih untuk berjalan pada salinan dari database aktual, atau setidaknya salinan dari subset dari database aktual dan lingkungan yang menghadap ke dalam. Dengan cara ini, Anda dapat menguji data aktual dan realistis dan tidak khawatir tentang lubang keamanan yang menyebabkan kebocoran. Anda dapat, tentu saja, membersihkan data, tetapi itu mungkin menghapus beberapa "data kotor" dari lingkungan yang dapat menyebabkan ditemukannya cacat dalam sistem langsung.
sumber
Di mana-mana saya bekerja di bank, telekomunikasi, dll. Pre-prod adalah salinan langsung produksi kecuali basis datanya akan berumur satu minggu atau lebih. Itu adalah proses besar mempertahankan data lintas pre-prod tetapi dianggap penting bagi perusahaan tempat saya bekerja yang menerapkan pre-prod.
Di bagian perbankan AU, pemerintah mendenda bank karena kegagalan layanan, misalnya ATM situs web dan lain-lain turun, setiap menit. Bukan hal yang luar biasa untuk mendengar tim pengembangan / pengujian yang dipecat karena suatu insiden. Pre-prod bukan untuk setiap perusahaan atau proses pengembangan tetapi penting untuk beberapa.
sumber