Saya sedang menjelaskan sistem pembangunan yang diusulkan (Gradle / Artifactory / Jenkins / Chef) kepada salah satu arsitek senior kami, dan dia berkomentar kepada saya bahwa saya agak tidak setuju, tetapi saya tidak cukup berpengalaman untuk benar-benar mempertimbangkannya.
Proyek ini membangun perpustakaan Java (JAR) sebagai artefak untuk digunakan kembali oleh tim lain. Untuk versi, saya ingin menggunakan pendekatan semantik:
<major>.<minor>.<patch>
Di mana patch
menunjukkan perbaikan bug / darurat, minor
menunjukkan rilis yang kompatibel ke belakang, dan major
menunjukkan baik refactoring besar-besaran dari API dan / atau perubahan yang tidak kompatibel ke belakang.
Sejauh pengiriman berlangsung di sini adalah apa yang saya inginkan: seorang pengembang melakukan beberapa kode; ini memicu build ke lingkungan QA / TEST. Beberapa tes dijalankan (beberapa otomatis, beberapa manual). Jika semua tes lulus, maka bangunan produksi menerbitkan JAR ke dalam repo kami. Pada titik ini JAR harus diversi dengan benar, dan pemikiran saya adalah untuk menggunakan build.number
yang secara otomatis dihasilkan dan disediakan oleh alat CI kami untuk bertindak sebagai nomor tambalan.
Jadi, versi sebenarnya adalah:
<major>.<minor>.<build.number>
Sekali lagi, di mana build.number
disediakan oleh alat CI.
Arsitek menolak ini, mengatakan bahwa menggunakan nomor build CI adalah "penyalahgunaan" versi semantik.
Pertanyaan saya adalah: apakah ini benar, dan jika demikian, mengapa? Dan jika tidak, mengapa tidak?
Salah satu alasannya adalah bahwa tambalan mungkin memerlukan beberapa build, jadi jika Anda memiliki versi 5.7, dan Anda ingin menambalnya ke 5.7.1, tetapi 2 perbaikan bug pertama Anda gagal membangun ketika mereka dikirimkan ke sistem CI, maka Anda akan menjadi di 5.7.3 sebelum Anda merilis tambalan pertama Anda!
Jawabannya adalah cukup menggunakan 4 digit (seperti yang cenderung dimiliki sistem Microsoft). Keempat adalah nomor build dan digunakan "hanya untuk informasi". Secara umum orang menaruh nomor versi repositori di sana (jika mereka menggunakan SVN atau TFS atau serupa) yang sangat bagus karena Anda dapat memverifikasi komit persis yang digunakan untuk membangun binari. Jika Anda tidak memiliki hal seperti itu, maka nomor build CI adalah perkiraan yang masuk akal (seperti yang Anda harapkan sistem CI Anda dapat mengingat nomor build dan mengikatnya ke sejarah repo, tetapi Anda tidak bergantung pada CI sistem mengingatnya - Anda tidak pernah dapat menghapus build lama).
Satu hal yang perlu diperhatikan, Skema Microsoft untuk versi menggunakan posisi ke-3 untuk nomor membangun. Chrome hanya menggunakan 1 angka. Ubuntu menggunakan tanggal. Tidak ada "standar" untuk digunakan , kecuali bahwa semua angka harus bertambah.
sumber