Bagaimana saya bisa mengotomatiskan penyebaran produksi tanpa mengalami kecemasan ekstrem?

32

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?

maple_shaft
sumber
'ls' setelah 'rm' pernah memungkinkan saya untuk menangkap perusahaan yang berbahaya yang berulang melalui tautan keras ke tempat-tempat yang lebih tinggi dalam sistem file. Mampu menangkapnya sementara masih ada cukup banyak sistem yang tersisa untuk digunakan untuk memulihkan file yang sudah dihapus (menghapus jutaan file sepertinya butuh waktu lama untungnya!). :-)
Brian Knoblauch

Jawaban:

30

Ada beberapa argumen yang jelas menentang hal ini.

  1. 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.

  2. 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.

  3. 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 :).

Luke Graham
sumber
21

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.

P.Brian.Mackey
sumber
7
Mungkin sesuatu seperti membuat Wizard Anda sendiri, di mana Anda dapat memicu setiap langkah secara manual. Output log dihasilkan dengan detail sebanyak yang Anda perlu verifikasi sebelum melanjutkan ke langkah berikutnya.
JeffO
@ Jeff saya suka ide itu! Kami baru saja berinvestasi dalam alat bantu bangunan GUI Swing yang bagus. Saya mencoba sedikit untuk setiap alasan untuk menggunakannya. Saya mengeluarkan alat GUI lebih cepat dari sebelumnya, dan penyihir visual akan menjadi sesuatu yang sangat baik sehingga pengembang junior bisa mengatasinya.
maple_shaft
@maple_shaft Dan Anda mendapatkan bagian dari pikiran mengetahui langkah di mana mereka menyalin file yang benar dilakukan pada waktu yang tepat.
JeffO
Saya setuju dengan ini. Sesuatu yang sederhana seperti file batch (atau serangkaian dari mereka) untuk melakukan penempatan Anda karena Anda dapat mengurangi ketegangan. Gunakan file batch untuk memastikan bahwa Anda tidak membuat kesalahan, dan jalankan secara manual untuk memastikan bahwa tidak ada kesalahan bencana saat menjalankan file batch.
Kibbee
4
@ Jeff O - Saya suka ide logging. Ini menciptakan ketertelusuran dan juga memberikan maple sesuatu ke QA. Saya tidak suka ide penyihir. Semakin banyak langkah yang diperlukan untuk mempublikasikan produk Anda ke produksi, semakin besar kemungkinan seseorang akan mengacaukannya. Otomatiskan semuanya. Periksa dengan manusia.
P.Brian.Mackey
15

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.

Pewpewarrows
sumber
1
Saya berharap saya bisa memiliki tingkat kepercayaan ini tetapi itu bukan kepercayaan pada alat yang mencegah ini, itu adalah kepercayaan pada kualitas aplikasi yang saya warisi dan sifatnya "Primadonna" setelah dikerahkan. Tentu saja apa yang Anda gambarkan adalah mimpi basah saya dan merupakan permainan akhir yang saya cari.
maple_shaft
@maple_shaft Ya, jika ini adalah aplikasi lama dengan cakupan tes yang tidak memadai, saya pasti bisa melihat ingin mengambil intervensi manual, terutama jika itu dikenal rewel.
Pewpewarrows
1
Salah satu metode yang baik untuk mempersiapkan skrip adalah dengan hanya merekam salah satu penyebaran ke file, input dan output, kemudian memodifikasinya untuk menyertakan pemindaian output untuk fakta-fakta yang Anda periksa dengan mata Anda secara normal.
SF.
8

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.

  • Anda tidak memiliki log yang baik, riwayat shell tidak masuk hitungan
  • Tidak ada orang lain yang tahu bagaimana melakukannya
  • Langkah-langkahnya terlewatkan
  • Cek hanya kadang-kadang dilakukan
  • Beberapa item untuk digunakan mungkin terlewatkan, saya pernah melakukannya sebelumnya
  • Itu membutuhkan waktu lebih lama
  • Anda dapat terganggu selama proses tersebut

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.

Spencer Rathbun
sumber
7

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;

  • Persiapkan (dan latihlah pada integrasi env) daftar periksa / serangkaian tes sehingga Anda dapat dengan cepat mengetahui apakah itu berhasil dan bagaimana jika ada masalah. Logging Verbose dapat membantu dengan ini.
  • Cadangkan semuanya. Mempersiapkan dan mempraktikkan rollback manual sehingga Anda dapat memulihkannya jika terjadi kesalahan besar.
  • Tes sebanyak yang Anda bisa sebelum Anda melakukannya dengan benar pada prod. Kedengarannya Anda cara yang baik bersama ini dengan integrasi Anda env.
  • Pertama kali Anda mencobanya, lakukan pada profil rendah, perubahan dampak rendah. Sesuatu seperti peningkatan kecil atau perbaikan. Idenya adalah untuk meminimalkan dampak jika terjadi kesalahan. Jangan memilih upgrade besar profil tinggi (di mana CEO dan semua pesaing Anda menonton) untuk menjalankan pertama Anda.

Setelah Anda berhasil menjalankan beberapa menjalankan, kepercayaan diri Anda akan tumbuh dan segera Anda akan bertanya-tanya bagaimana Anda pernah berhasil melakukan penyebaran manual.

Qwerky
sumber
1
Saya pikir jawaban Anda adalah salah satu yang terbaik, karena sebenarnya mengatasi kegelisahan sementara sebagian besar jawaban lain di luar topik, menganjurkan penyebaran otomatis — yang manfaatnya telah diketahui oleh OP. Dengan demikian jawaban Anda layak mendapatkan hadiah!
user40989
4

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:

  • Jangan lakukan semuanya sekaligus! Mulai secara perlahan menulis penyebaran otomatis Anda. Tetapkan lingkungan non-produksi yang terpisah terlebih dahulu, dan coba otomatiskan penerapannya di sana. Setelah Anda membangun kepercayaan dalam penerapan otomatis Anda, Anda dapat mulai berpikir untuk melakukan penyebaran produksi
  • Mulai melepaskan dan menggunakan sangat sering! Jauh lebih mudah untuk melakukan penyebaran otomatis ketika Anda tidak memiliki kode 4 bulan menunggu untuk dirilis. Lepaskan fitur kecil dan perbaikan bug beberapa kali per minggu. Manfaat gaya rilis ini tidak dapat diabaikan!
  • Andalkan pengujian otomatis untuk memberi Anda kepercayaan diri bahwa lingkungan produksi Anda akan berfungsi. Sekali lagi, ini membutuhkan waktu untuk membangun, tetapi sangat penting. Tes otomatis selalu lebih baik daripada tes penerimaan manual. Tentu, tes penerimaan manual baik-baik saja, tetapi tes otomatis dapat membantu Anda mengetahui apakah Anda harus menggunakan produksi atau tidak. Mereka adalah kunci yang memungkinkan seluruh proses pengiriman otomatis dan berkesinambungan ini. Jika tes Anda tidak lulus, Anda tahu untuk tidak menggunakan produksi.
dsw88
sumber
3

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.

Paul T Davies
sumber
3

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.

Carra
sumber
3

Bagaimana saya bisa mengotomatiskan penyebaran produksi tanpa mengalami kecemasan ekstrem?

Kecemasan ekstrem yang akan Anda alami ketika mengotomatiskan penyebaran produksi, kemungkinan besar, didasarkan pada dua kepercayaan:

  1. 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.

  2. 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.

pengguna40989
sumber
2

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.

HLGEM
sumber
Masalahnya adalah bahwa prod dan pementasan dan QA tidak terlihat sama. Jadi skrip akan melakukan hal yang berbeda pada setiap lingkungan. Jadi skrip akan diuji untuk pertama kali pada produksi.
Piotr Perak
Kemudian atur lingkungan yang Anda segarkan dari Prod sesaat sebelum Anda menjalankan skrip otomatis. Gunakan untuk hal lain.
HLGEM
Saya tidak mengerti. Jika dia dapat mengatur lingkungan yang terlihat seperti PROD, dia tidak akan memiliki masalah sama sekali.
Piotr Perak
1

... 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!)

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.

  • Di salah satu proyek saya membantu mereka dalam penempatan sebagai perwakilan tim dev. Sebelum penempatan, mereka meninjau instruksi saya dan selama penempatan saya hanya duduk online siap untuk berkonsultasi jika ada kesalahan. Saat itu, saya belajar menghargai pemisahan itu .
     
    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.
agas
sumber
Terima kasih, senang mendengar dari seseorang yang tahu seperti apa rasanya ini. Tidak perlu dikatakan kita terlalu kecil untuk menjamin tim pembangun yang menangani penyebaran produksi kita. Ketika Anda bekerja di sebuah startup, Anda belajar mengenakan 20 topi berbeda dengan cukup cepat dan saya tidak selalu memiliki "fokus" yang mewah. Saya pikir saya akan menulis skrip penyebaran dan verifikasi yang kuat untuk kewarasan saya. Untuk pertama kalinya dalam beberapa saat saya memiliki jeda dua minggu antara proyek di mana saya bisa menyelesaikan sesuatu seperti ini.
maple_shaft
skrip verifikasi saya melihat. Nah, mengingat situasi Anda, ini tampaknya menjadi hal terbaik berikutnya setelah tim pengembang yang berdedikasi. Saya bertanya-tanya apakah Anda benar-benar tidak memiliki pilihan untuk menguji-menyebarkan pada pengaturan dua-server? bahkan jika Anda melewatkan penyeimbang beban, hanya untuk menguji-asap bahwa kedua URL master / slave merespons?
nyamuk
1

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.

Andy
sumber
1
  1. Menyederhanakan. Proses perubahan Anda harus file rsync, jalankan skrip SQL, tidak lebih.
  2. Mengotomatisasikan.
  3. Uji.

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.

Morg.
sumber
0

Sangat mungkin untuk menggunakan skrip otomasi untuk digunakan ke lingkungan produksi. Namun untuk melakukannya dengan andal Anda harus dapat melakukan beberapa hal.

  1. Andal memutar kembali ke versi sebelumnya.
  2. Dapatkan konfirmasi positif bahwa penerapan telah berhasil diterapkan, dan merespons lalu lintas yang valid.
  3. Memiliki lingkungan yang sebanding untuk pengembangan dan QA yang juga menggunakan skrip yang sama.

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.

Michael Shaw
sumber
-2
  1. ambil jendela yang lebih besar untuk penempatan pertama kali jika terjadi kesalahan
  2. 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.

Yadvendra
sumber
ini tidak menjawab pertanyaan yang diajukan: "Apa argumen yang menentang ATAU argumen ini untuk penyebaran produksi skrip otomatis?"
nyamuk