Tes Joel mencakup pertanyaan:
Bisakah Anda membuat build dalam satu langkah?
Yang penting, tapi saya bertanya-tanya, seberapa efisienkah beberapa proses penyebaran ?
Semua perangkat lunak dari shrink-wrap ke web berlaku: apa lingkungan penerapan terbaik yang pernah Anda pakai, dan langkah apa yang dilibatkan?
project-management
deployment
Steven Evers
sumber
sumber
Jawaban:
Ini adalah lingkungan yang telah saya atur di perusahaan saya, dan saya sedang bekerja dengannya sekarang.
Deskripsi lingkungan
Kami adalah tim yang terdiri dari 4 pengembang, mengerjakan proyek desktop Java . Kode sumber berada di bawah Mercurial , dengan repo utama di-host di server pengembangan kami. Kami kebanyakan menggunakan TortoiseHg untuk bekerja dengan Mercurial. Proyek-proyek yang kami buka bersumber dari BitBucket . Proyek ini dibangun dengan Maven . IDE yang kami gunakan adalah Netbeans , yang bekerja sangat baik dengan Maven (bekerja dengan Mercurial juga).
Server dev kami menjalankan Archiva , yang merupakan repositori proxy Maven. Kami menggunakan maven untuk membangun proyek, tetapi kami menggunakannya juga untuk menjalankannya (mvn exec), untuk menyebarkan artefak yang dihasilkan ke Archiva (rilis mvn), dan untuk menghasilkan perakitan dari artefak yang diselenggarakan oleh Archiva (mvn assembly).
Kami memiliki bugtracker Redmine juga, dan mengetahui repo Mercurial. Kami menggunakan klien RSS untuk mendapat informasi tentang aktivitas proyek (dari Redmine dan Mercurial). Kami juga memiliki server Jabber untuk saling mengirim pesan dan file.
Kami menyiapkan server Hudson (integrasi berkelanjutan) dan server Sonar (metrik kode). Tetapi dalam praktiknya kita tidak benar-benar menggunakannya.
Kami memiliki pilihan untuk menggunakan Windows atau Linux
Langkah-langkah untuk membuat rilis
Contoh untuk merilis versi 1.1.3
sumber
Saya menggunakan fabric untuk mengatur penyebaran di startup baru saya.
Memperbarui server langsung semudah:
Ini mendapatkan semua sumber terbaru, memasang halaman pemeliharaan, memigrasikan database, mengatur kode baru, mendapatkan semua dependensi, menghentikan / memulai semuanya, dll. Semua informasi terkait (kata sandi, nama pengguna, dll.) Adalah semua bertanya dimuka.
Saya hanya menjalankan perintah, memasukkan beberapa info, dan pergi mengambil secangkir kopi. Semuanya hidup pada saat saya kembali.
sumber
Saya tidak yakin saya setuju dengan Joel tentang hal ini - tentunya tidak ada langkah yang lebih baik dari satu?
Kami menggunakan Hudson untuk membuat skrip bangunan kami (terus-menerus pada Mac dan Windows), termasuk membuat installer dan gambar CD untuk beberapa kali kami benar-benar mengirimkan kotak yang sebenarnya. Kami selalu menguji dari penginstal di QA.
Kami juga menggunakan Hudson untuk menyalin installer ke area "beta" situs web langsung kami sekali per hari.
Jadi pada dasarnya kami dapat menyebar ke pengguna setiap hari tanpa langkah. Ketika kami membuat rilis resmi, kami hanya mengganti nama file installer di CMS untuk membuat installer beta saat ini menjadi rilis, dan mengubah script build Ant untuk beralih ke nomor versi baru (yang menjadi beta baru).
Memiliki pengaturan dan kerja ini menjadikan hari rilis sebagai acara yang benar-benar non-peristiwa (yang memang seharusnya demikian). Kami tidak memiliki kesalahan pada hari rilis untuk sementara waktu sekarang (dulu sering terjadi)!
sumber
Di salah satu klien saya, kami bekerja di Rails dan mengatur semuanya agar penyebaran menarik dari git. Kami tidak "membangun," karena itu Rails.
Jadi proses penyebarannya seperti
Campuran antara Capistrano dan GIT bekerja dengan sangat baik.
Tentu saja, skrip lebih lanjut akan dilakukan untuk melewati beberapa langkah ini.
sumber
Alur kerja saya saat ini seperti ini.
Ini semua dapat ditulis dalam satu langkah.
sumber
Kami memiliki aplikasi Java Web Start - kami akan membangun kembali prosedur penyebaran menjadi file WAR dengan file JNLP diadaptasi ke URL yang diminta ketika diminta kembali oleh pengguna.
Saya berharap itu berjalan sangat lancar.
Akhir-akhir ini kami banyak menggunakan git. Gagasan mendaftarkan penyebaran di repositori git sehingga Anda cukup meminta git untuk checkout versi yang ingin Anda jalankan. Pembaruan latar belakang, waktu checkout yang sangat singkat untuk memperbarui file yang sebenarnya, waktu checkout yang sangat singkat untuk memutar kembali ke versi sebelumnya jika ada masalah. Saya pikir itu bisa bekerja dengan baik untuk kita.
sumber
Memang ini sekarang agak ketinggalan jaman, tetapi saya dulu memiliki yang berikut ini menjadi langkah untuk menyebarkan kode saya beberapa bulan lalu yang saya temukan sebagai yang terbaik yang pernah saya miliki:
Ini kembali pada akhir 1990-an ketika saya pemrograman dalam Visual C ++ pada NT 4.0 untuk dot-com. Sebagian besar proses penyebaran sejak ini menjadi lebih rumit dalam memiliki tugas nAnt dan hal-hal tambahan lainnya seperti berurusan dengan server produksi yang seimbang sedangkan pada hari kita hanya memiliki satu kotak produksi.
Tentu saja menyerahkan proses kepada seorang insinyur rilis lebih baik tetapi tidak sama seperti jika saya memasukkan kode ke alam liar.
sumber
Bukan untuk apa-apa, tetapi mengklik kanan pada aplikasi web ASP.NET dan memilih Terbitkan adalah kejutan yang menyenangkan ketika saya harus menggunakan aplikasi. Memang, saya harus mengatur direktori virtual dan semacamnya pada IIS sebelumnya, tetapi menggunakan versi baru hanya dengan beberapa klik saja.
sumber