Jelaskan lingkungan penerapan terbaik yang pernah Anda kerjakan [ditutup]

8

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?

Steven Evers
sumber
Apakah tes Joel mencakup pertanyaan: "apakah kolam renang pribadi & lapangan tenis tersedia untuk karyawan?"
1
@Pierre 303 Tidak, tetapi jika Anda punya, di mana saya dapat mengirim resume saya? :)
Steven Evers
swift.com : kirim CV Anda di markas besar di Belgia
Hal paling luar biasa yang pernah saya lihat.

Jawaban:

6

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

# tags the VCS, updates all the version numbers in the maven config file
mvn --batch-mode release:prepare -DreleaseVersion=1.1.3 -DdevelopmentVersion=1.1.4-SNAPSHOT
# performs a clean build, runs all tests, deploys to the server
mvn release:perform
# creates a unique jar (the final product) from the previously deployed artifacts (no recomilation involved)
<update the version number in a config file to 1.1.3>
mvn assembly:assembly
barjak
sumber
+1 untuk rilis mvn: perform
Fil
+1 karena memiliki Sonar dalam proses pembuatan Anda. -1 untuk tidak menggunakannya.
mhaller
Sebenarnya, saya tidak tahu apa yang harus saya lakukan dengan data yang diberikan Sonar kepada saya. Melihat statistik basis kode itu menyenangkan, tetapi itu tidak membantu saya dalam pekerjaan saya sehari-hari. Oh, dan saya tidak suka alat analisis statis: mereka menghasilkan terlalu banyak positif palsu untuk membantu.
barjak
3

Saya menggunakan fabric untuk mengatur penyebaran di startup baru saya.

Memperbarui server langsung semudah:

fab prod upgrade

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.

Sam Dolan
sumber
Kedengarannya surgawi.
Steven Evers
2

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

Tawaran
sumber
Kapan build installer dipicu, jika tidak secara manual? Secara berkala? Di acara komit?
barjak
1

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

git checkout review
git merge whatever-that-was
git push
cap review deploy:migrations

Campuran antara Capistrano dan GIT bekerja dengan sangat baik.

Tentu saja, skrip lebih lanjut akan dilakukan untuk melewati beberapa langkah ini.

Dan Rosenstark
sumber
1

Alur kerja saya saat ini seperti ini.

  1. Kembangkan pada VM lokal
  2. Uji, Komit perubahan, dorong ke github
  3. ssh ke EC2 dan tarik perubahan

Ini semua dapat ditulis dalam satu langkah.

mcotton
sumber
8
Anda dapat membuat skrip pada langkah 1, benarkah? :)
barjak
repositori github publik atau pribadi? Jika yang terakhir, apa pengalaman Anda?
Saya menggunakan repositori publik, tetapi untuk proyek sebelumnya saya menggunakan Kiln dari fogcreek sebagai repo pribadi.
mcotton
@ ThorbjørnRavnAndersen: Saya menggunakan repositori github pribadi. Ini berfungsi dengan baik, persis sama dengan yang umum, kecuali hanya Anda yang dapat mengaksesnya. :)
Bjarke Freund-Hansen
1

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
1

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:

  1. Check-in kode saya berubah menjadi Visual SourceSafe.
  2. Dapatkan Versi Terbaru di mesin bos saya.
  3. Kompilasi solusi yang menghasilkan beberapa DLL.
  4. Tunjukkan bahwa kode baru berfungsi seperti seharusnya.
  5. Putuskan koneksi server produksi dari Internet untuk memperbaruinya tanpa gangguan.
  6. Salin binari ke server produksi.
  7. Mulai IIS.
  8. Redial kembali ke internet pada jalur ISDN yang digunakan.

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.

JB King
sumber
0

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.

Kode keras
sumber