Bagaimana cara mentransfer file ke produksi?

9

Kami adalah grup yang mulai mengerjakan situs web yang cukup besar dengan basis kode yang ada. Kami memiliki tes dan server produksi.

Ide kami adalah memiliki repositori pengujian dengan sejumlah devs yang memiliki akses push ke; dan repositori terberkati yang hanya bisa didorong oleh beberapa orang. Repo yang diberkati itu seharusnya selalu stabil dan mewakili versi produksi terbaru.

Bagaimana saya bisa mengotomatiskan proses mentransfer file ke dalam produksi? Apakah buruk memiliki file produksi di bawah kontrol versi? Dengan begitu, mendorong ke repositori yang diberkati akan berarti penyebaran. Tapi, apa yang terjadi ketika ada menggabungkan konflik? Apakah server produksi akan rusak sampai teratasi?

Tamás Szelei
sumber

Jawaban:

7

Sederhananya:
Proses push itu sendiri harus sepenuhnya otomatis. Apakah Anda memiliki beberapa skrip khusus, atau Anda hanya menarik dari repo "diberkati" ke lingkungan produksi. Itu terserah anda. Anda hanya perlu memiliki sesuatu yang otomatis, karena proses otomatis dapat dibuat andal (sebagai lawan mengunggah file dengan tangan dan semacamnya).

Namun, proses push harus dipicu secara manual. Anda mendorong pembaruan Anda, dan begitu Anda merasa percaya diri, Anda menandainya sebagai kandidat rilis dan menariknya ke lingkungan pengujian Anda (yang idealnya akan sama dengan lingkungan produksi Anda mungkin). Setelah RC diuji, dorongan dapat dimulai.
Sampai hari ini, tidak ada lagi yang bisa memberi Anda, apa yang bisa dilakukan penguji manusia.

Ini terdengar agak lambat, dalam arti bahwa loop umpan balik relatif besar. Tetapi untuk pengujian yang tepat, penting untuk mengambil snapshot tetap, yang kemudian diperiksa selama 24-48 jam (atau mungkin lebih, tergantung pada ukuran proyek). Sebaliknya adalah skenario, di mana Anda menemukan banyak bug tepat setelah mendorong dan Anda mencoba untuk menambalnya dengan beberapa perbaikan cepat yang memperkenalkan bug baru.
Anda sebaiknya membuat rilis dengan bug yang diketahui (dengan tingkat keparahan yang dapat diterima), daripada yang dengan bug yang tidak diketahui (dengan tingkat keparahan yang tidak diketahui).

back2dos
sumber
Jadi memiliki repo di server produksi tidak masalah? Ketika saya mengatakan otomatisasi, maksud saya kalau-kalau tidak ada repo di server produksi (dengan kata lain, akan ada pengujian dan repo yang diberkati , tetapi tidak produksi ). Tentu saja, pengujian manusia tidak dapat otomatis, bukan itu yang saya cari.
Tamás Szelei
1
@ Tamás: Mungkin tidak masalah untuk melakukan checkout lokal dari repo yang diberkati di server Anda, jika itu yang Anda maksud (apache (atau server web lain yang layak) membuatnya mudah untuk membuat file-file terkait git tidak dapat diakses dari luar). Namun Anda dapat dengan mudah membuat "ekspor" itu. Tidak ada gunanya memiliki file di webroot Anda, yang bukan milik di sana.
back2dos
Err -... Jadi bagaimana Anda tahu persis apa bug yang tidak diketahui dengan tingkat keparahan yang tidak diketahui jika mereka ... tidak diketahui ?
Spoike
@Seperti saya pikir back2dos hanya menganjurkan pengujian secara menyeluruh, menggunakan rilis tetap yang tidak memiliki perbaikan "cepat dan kotor" yang belum teruji.
Maks
@Spoike: Dalam 24-48 jam Anda dapat mengubah banyak bug yang tidak dikenal menjadi bug yang dikenal. Juga dalam 5 menit, Anda dapat mengubah bug yang dikenal menjadi banyak bug yang tidak dikenal. Ini disebut perbaikan cepat.
back2dos
2

Saya belajar banyak tentang penyebaran dari melihat bagaimana Capistrano beroperasi. Saya bekerja dengan RoR pada saat itu, jadi itu adalah pilihan yang logis dan meskipun saya tidak pernah cukup untuk berperilaku untuk proyek yang saya kerjakan, cara melakukan pembaruan otomatis sangat berguna.

Anda mungkin berada dalam situasi di mana Anda dapat menggunakannya secara langsung bahkan - itu tidak harus dikaitkan dengan Rails - tetapi jika tidak, cara berperilaku itu tentu membantu.

glenatron
sumber
1

Tergantung pada platform apa yang Anda gunakan, ada banyak alat di luar sana yang mungkin masuk akal untuk Anda gunakan untuk mengotomatiskan rilis produksi. Saya bekerja di toko NET. Jadi kami telah menggunakan NAnt (meskipun MSBuild adalah pilihan yang lebih baik saat ini). Java memiliki Ant, dan mungkin hal-hal lain. Ruby memiliki hal-hal seperti Rake. Lalu ada platform integrasi berkelanjutan seperti TeamCity dan Hudson yang dapat digunakan untuk mengelola rilis juga.

Saya belum pernah melihat atau mendengar memiliki kode prod langsung di repo kontrol sumber terpisah tapi itu pasti bisa bekerja. Seperti kata back2dos, kuncinya adalah mengotomatisasi. Kami memiliki skrip bangunan kami dirancang untuk memeriksa dari kontrol sumber, membangun, dan mendorong ke lingkungan pementasan untuk pengujian. Kemudian, ketika kita suka bagaimana pementasan bekerja, skrip menyalin dari QA ke Prod.

Rekomendasi saya adalah untuk melihat alat di luar sana dan memilih satu, dan kemudian merancang suatu proses yang akan bekerja dengan baik dengan alat yang dipilih. Jangan mencoba menemukan kembali roda terlalu banyak - ini adalah masalah yang sangat terpecahkan.

RasionalGeek
sumber