Di toko kami, kami menggunakan SVN untuk kontrol sumber dan CruiseControl untuk CI dalam menangani pembuatan dan penerapan otomatis untuk lingkungan pengembangan, pengujian, dan integrasi kami.
Ini semua bekerja dengan lancar namun karena kendala perangkat keras dan sumber daya, lingkungan integrasi kami bukan lingkungan yang seimbang dengan 2 server seperti lingkungan produksi kami. Sementara yang lainnya sama, itu akan menjadi satu-satunya perbedaan antara lingkungan integrasi dan produksi kami (meskipun yang besar!)
Secara teoritis perbedaannya adalah konfigurasi yang sedikit berbeda dari server aplikasi kami dan skrip penyebaran hanya harus menjatuhkan artefak bangunan menjadi dua server, bukan hanya satu, tetapi mengapa saya sangat gugup untuk mengotomatiskan penyebaran produksi kami ?!
Saya biasanya bukan orang yang suka mengendalikan, tetapi saya selalu merasa perlu untuk menyebarkan produksi ke produksi secara manual. Saya telah mendengar dari rekan-rekan saya bahwa ini pada umumnya adalah Really BAD Thing ™ tetapi mereka gagal untuk membuktikannya.
Saya tahu bahwa ketika saya melakukannya secara manual, saya dapat MELIHAT bahwa saya secara fisik menyalin file yang benar, saya secara fisik mematikan server aplikasi dan memastikan mereka menutup dengan sukses, saya secara fisik memulai server kembali dan kemudian secara fisik memeriksa log untuk membuat yakin itu dimulai baik-baik saja dan penyebaran berhasil. Ini memberi saya ketenangan pikiran.
Apa argumen yang menentang argumen ATAU ini untuk penggunaan produksi skrip otomatis?
sumber
Jawaban:
Ada beberapa argumen yang jelas menentang hal ini.
Apa yang terjadi jika Anda pergi. Apakah semua informasi ini didokumentasikan dengan cermat, atau sebagian besar di kepala Anda. Script otomatis adalah tempat yang jauh lebih baik bagi orang lain untuk mengambil alih.
Setiap orang membuat kesalahan. Akan tiba saatnya orang yang melakukan penyebaran lelah, tidak memperhatikan apa pun. Ya, penyebaran idealnya hanya dilakukan di tempat yang tenang dan menyenangkan dengan banyak waktu. Dalam praktiknya mereka bisa tergesa-gesa dan stres ketika mencoba untuk melakukan perbaikan yang mendesak. Ini adalah waktu yang paling mungkin untuk membuat kesalahan, dan juga yang paling mahal. Jika penyebaran adalah skrip tunggal maka potensi kesalahan terbatas.
Waktu. Karena penyebaran semakin rumit, jumlah yang perlu dilakukan meningkat. Skrip hanya memerlukan kicking off, pemeriksaan manual, dan kemudian pengalihan manual (Anda bisa mengotomatisasi ini juga, tapi saya berbagi beberapa paranoia :).
sumber
Anda bisa mendapatkan yang terbaik dari dunia terbaik: ketenangan pikiran dengan proses verifikasi dan keandalan otomatisasi.
Script penyebaran Kemudian, telusuri dan verifikasi secara manual bahwa proses dimulai, file dihapus, dll. Dengan kata lain, tulis skrip QA Anda sendiri hanya untuk memverifikasi bahwa langkah otomatis 1 - X benar-benar terjadi.
sumber
Saya pikir kuncinya di sini adalah: mengapa Anda berpikir bahwa Anda tidak dapat membuat skrip proses verifikasi?
Skrip deploy saya tidak hanya mendorong arsip dan memulai kembali layanan. Mereka mencetak banyak informasi berkode warna pada setiap langkah penggunaan, dan memberi saya ringkasan acara di bagian akhir. Ini memberi tahu saya bahwa proses sedang berjalan dan berjalan, bahwa beranda melayani 200 kode status, dan bahwa semua mesin dan layanan dapat melihat satu sama lain dengan baik. Saya kemudian memiliki layanan terpisah yang bukan bagian dari skrip yang memonitor file log, kesalahan level 4xx dan 5xx, dan metrik situs utama. Kemudian mulai berteriak kepada saya melalui setiap media yang mungkin (email, pesan txt, dan alarm) jika ada lonjakan efek negatif drastis.
Antara itu dan server CI menjalankan tes, saya benar-benar menyebarkan dan melupakan pada tingkat otomatisasi ini. Saya bahkan tidak menjelajah satu halaman pun di situs setelah dorongan karena seberapa andal prosesnya saat ini, yang tidak hanya memungkinkan saya menggunakan sesering yang saya inginkan, tetapi juga memungkinkan pengembang baru di proyek membuat pembaruan ke siaran langsung. situs dalam beberapa menit setelah naik kapal. Di masa lalu saya bahkan membuat server CI auto-deploy ke produksi setelah komit ke cabang master / trunk yang melewati segalanya. Itulah cara saya percaya diri dalam alat saya.
Anda seharusnya juga begitu.
sumber
Apakah Anda juga menjalankan mesin produksi Anda dengan debugging jarak jauh, dan Anda melangkah secara manual? Membangun skrip yang tepat identik dengan menulis program. Semua masalah yang Anda miliki menunjukkan hal-hal yang perlu diperhatikan dan diperiksa.
Jika terjadi kesalahan, itu harus melalui prosedur rollback yang tepat, dan mengirimi Anda pesan. Segala sesuatu yang terjadi dapat dicatat nanti. Anda dapat mengontrol versi skrip, dan mengatur kasus uji.
Tetapi jika Anda menjalankan perintah secara manual, Anda tidak memiliki kelebihan ini. Anda malah memiliki daftar kerugian.
Script yang tepat harus hampir identik dengan jika Anda mengetik semuanya pada shell. Ini adalah salah satu alasan kami memiliki skrip bash. Jika Anda memercayai hal-hal yang Anda lakukan, mengapa Anda tidak dapat merekam semuanya dan memperketatnya? Pemeriksaan yang lebih baik, pemeriksaan yang lebih cepat, pemeriksaan yang lebih banyak dapat terjadi karena komputer melakukannya.
sumber
Saya bisa mengerti menjadi sedikit gugup mencoba sesuatu yang baru di lingkungan prod. Waspada terhadap potensi bencana adalah Good Thing TM .
Script otomatis juga merupakan Good Thing TM dan selama Anda mendekatinya dengan cermat, Anda harus dapat meminimalkan bahaya dan menurunkan rasa takut Anda. Jadi saran saya adalah ini;
Setelah Anda berhasil menjalankan beberapa menjalankan, kepercayaan diri Anda akan tumbuh dan segera Anda akan bertanya-tanya bagaimana Anda pernah berhasil melakukan penyebaran manual.
sumber
Inilah argumen terbesar menentang penyebaran manual untuk produksi: Anda adalah manusia dan akan melakukan kesalahan. Pasti akan ada saat-saat ketika Anda akan lupa melakukan sesuatu yang akan membuat Anda sedih. Penempatan otomatis yang ditulis dengan baik tidak memiliki kecenderungan yang sama. Memang benar bahwa Anda masih dapat mengacaukan penyebaran produksi, tetapi itu karena penyebaran otomatis Anda memiliki bug yang perlu dipecahkan.
Dalam pengalaman saya, manfaat penyebaran otomatis untuk produksi luar biasa. Yang terbesar adalah Anda bisa bersenang-senang di akhir pekan alih-alih mencoba berbaris melalui proses penyebaran manual yang tidak akan bekerja sama.
Yang mengatakan, berikut adalah beberapa petunjuk penting untuk mengotomatiskan penyebaran produksi Anda:
sumber
Jalankan skrip di server langsung. Ini akan berhasil, dan setelah Anda melihatnya berfungsi dengan baik beberapa kali, Anda akan sangat percaya diri di dalamnya.
Namun serius, Anda lebih cenderung membuat kesalahan daripada skrip penerapan.
sumber
Komputer tidak melakukan kesalahan, orang-orang melakukannya.
Tulis skrip Anda sekali dan periksa dengan seksama, lewati setiap baris. Sejak saat itu, Anda dapat memastikan bahwa setiap kali Anda menggunakan, ini akan berfungsi.
Lakukan dengan tangan dan Anda pasti akan membuat kesalahan. Mungkin Anda menulis, semua yang harus Anda lakukan, turun tapi itu mudah untuk melakukan kesalahan. Anda harus menyalin semua file kecuali file web.config? Anda bisa bertaruh bahwa suatu hari nanti Anda akan menimpanya. Sebuah skrip tidak akan pernah melakukan kesalahan ini.
sumber
Kecemasan ekstrem yang akan Anda alami ketika mengotomatiskan penyebaran produksi, kemungkinan besar, didasarkan pada dua kepercayaan:
Suatu hari atau yang lain, beberapa langkah penerapan akan gagal dan Anda atau manusia lain dapat pulih dengan cepat dari kegagalan sementara skrip otomatis dapat mengabaikannya.
Kegagalan yang diabaikan dalam produksi memiliki konsekuensi dramatis.
Ada sedikit yang bisa dilakukan tentang 2., selain menghindari kegagalan, jadi mari kita fokus pada 1.
Solusi murah yang sedikit memperbaiki pada yang ada adalah dengan menggunakan prosedur penyebaran semi-otomatis, menunggu validasi pada akhir setiap langkah instalasi. Dengan solusi semi-otomatis Anda akan menikmati manfaat dari solusi otomatis penuh, seperti konsistensi dan reproduktifitas, sementara Anda masih akan mendapatkan kesempatan untuk memantau kemajuan dan pulih dari kesalahan seperti yang biasa Anda lakukan.
Skrip semi-otomatis dan biotope-nya (tes regresi, dll.) Juga bisa berfungsi sebagai kendaraan untuk pengetahuan yang Anda kumpulkan tentang kegagalan yang terjadi dalam prosedur instalasi dan cara untuk memulihkannya.
sumber
Yang saya suka adalah Anda dapat menguji penyebaran pada pementasan atau QA dan tahu bahwa ketika Anda menjalankannya pada prod langkah-langkah yang sama persis akan terjadi.
Ketika Anda melakukannya secara manual, lebih mudah untuk melupakan satu langkah atau melakukannya secara salah.
sumber
Diberikan di atas, saya mungkin akan cemas seperti Anda.
Saya pernah melakukan review dan pengujian skrip otomatis yang menyebarkan ke SLB dan perasaan saya adalah bahwa tanpa pra-pengujian pada pengaturan yang seimbang saya lebih suka melakukan sesuatu secara manual.
Selain setup pengujian seperti prod, hal lain yang memiliki dampak signifikan pada ketenangan pikiran saya adalah bahwa penyebaran prod dilakukan oleh tim lain yang pengembang - oleh orang-orang yang hanya tugasnya adalah menjaga lingkungan produksi.
Bukan karena mereka lebih cepat (mengapa mereka melakukannya? Saya melakukan pengujian penyebaran 5x-10x lebih sering daripada mereka). Perbedaan besar dalam fokus. Maksudku, kepalaku selalu dimuat oleh hal-hal "utama" - coding, debugging, fitur-fitur baru - ada terlalu banyak gangguan untuk berkonsentrasi dengan benar pada penyebaran. Bertentangan dengan itu, barang utama mereka hanyalah pemeliharaan produksi dan mereka fokus pada hal itu.
Sungguh menakjubkan betapa otak lebih baik bekerja ketika fokus. Orang-orang ini, mereka jauh lebih perhatian, mereka membuat kesalahan jauh lebih sedikit daripada saya. Mereka hanya tahu hal itu lebih baik dari saya. Mereka bahkan mengajari saya satu atau dua hal yang membuat penyebaran tes saya sendiri lebih mudah.
sumber
Buat skrip penerapan yang Anda gunakan untuk memindahkan kode ke lingkungan apa pun. Kami menggunakan proses penyebaran yang sama persis untuk memindahkan kode ke dev, qa, staging, dan akhirnya produksi. Karena kami menggunakan beberapa kali per hari untuk dev, dan setiap hari ke QA, kami memperoleh kepercayaan bahwa skrip penerapan benar. Pada dasarnya, coba lakukan dengan sering menggunakannya.
sumber
Alasan untuk mengotomatisasi adalah untuk mendapatkan sesuatu yang dapat diuji, dapat diulang, dan Anda dapat percaya untuk bekerja dengan benar dalam setiap situasi yang diharapkan.
Anda masih perlu memiliki rencana mundur, seperti untuk setiap perubahan dalam konteks apa pun, dan itu harus otomatis juga.
Anda akan tetap ingin mengamati proses sebagaimana yang terjadi jika lingkungan benar-benar sensitif, tetapi tidak pernah melakukannya secara manual karena tidak dapat direproduksi.
sumber
Sangat mungkin untuk menggunakan skrip otomasi untuk digunakan ke lingkungan produksi. Namun untuk melakukannya dengan andal Anda harus dapat melakukan beberapa hal.
Ada beberapa keuntungan skrip, seperti mereka tidak akan pernah melewatkan perintah karena jam 2 pagi, dan lelah.
Namun, skrip dapat dan masih akan gagal. Kadang-kadang kegagalan dalam desain skrip, tetapi bisa juga disebabkan oleh kegagalan jaringan atau daya, sistem file yang rusak, kehabisan memori .....
Itulah mengapa penting bahwa setelah skrip berjalan, bahwa fase pengujian yang ditentukan juga diikuti yang memverifikasi bahwa penyebaran baru sudah habis, menjalankan dan menangani permintaan, sebelum lalu lintas langsung diaktifkan.
sumber
Bagilah proses Penempatan menjadi dua bagian. Sebuah. Cadangkan (manual) - ini akan memberi Anda kepercayaan diri jika terjadi kesalahan selama pemasangan
b. Penempatan (otomatis)
setelah Anda dapat menggunakan dengan percaya diri untuk pertama kalinya. Anda dapat mengotomatiskan proses pencadangan juga.
sumber