Apa sebenarnya nomor build di MAJOR.MINOR.BUILDNUMBER.REVISION


55

Apa yang saya pikirkan tentang Bilangan Bangun adalah bahwa setiap kali bangunan malam yang baru dibuat, BUILDNUMBER baru dibuat dan ditugaskan untuk bangunan itu. Jadi untuk aplikasi versi 7.0 saya build malam akan 7.0.1, 7.0.2 dan seterusnya. Benarkah begitu? Lalu apa gunanya REVISI setelah nomor build? Atau apakah bagian REVISION bertambah setelah setiap malam membangun? Saya agak bingung di sini ... apakah kita menyebut setiap bangunan malam sebagai BUILD ?

Formatnya disebutkan di sini: AssemblyVersion - MSDN


Maka Anda bisa menggunakan tanggal sebagai nomor build!

2
Build: Setiap build baru dari sistem, Revisi: Hotfix atau "revisi" Build yang dirilis, jadi mengapa ia mengubah versi Build; Build Anda saat ini mungkin 2.2.12.0 tetapi build yang dirilis mungkin 2.2.8.0 dan ketika Anda perlu memperbaiki itu, Anda menarik kode sumber untuk 2.2.8, merevisinya, dan membangun 2.2.8.1, 3 bulan kemudian saat ini adalah 2.2.16.0 tetapi satu pelanggan masih pada 2.2.8.1 dan mengalami bug lain, Anda menarik kode untuk 2.2.8.1 dan merevisinya untuk memperbaiki bug, dan melepaskannya sebagai 2.2.8.2
Jimmy Hoffa

Jawaban:


57

Saya belum pernah melihatnya ditulis dalam bentuk itu. Di mana saya bekerja, kami menggunakan formulir MAJOR.MINOR.REVISION.BUILDNUMBER, di mana MAJOR adalah rilis utama (biasanya banyak fitur baru atau perubahan pada UI atau OS yang mendasarinya), MINOR adalah rilis minor (mungkin beberapa fitur baru) di rilis besar sebelumnya, REVISION biasanya merupakan perbaikan untuk rilis minor sebelumnya (tidak ada fungsi baru), dan BUILDNUMBER ditambahkan untuk setiap versi revisi terbaru.

Misalnya, revisi dapat dirilis ke QA (kontrol kualitas), dan mereka kembali dengan masalah yang memerlukan perubahan. Bug akan diperbaiki, dan dilepaskan kembali ke QA dengan nomor REVISI yang sama, tetapi BUILDNUMBER yang bertambah.


+1: Begitulah cara saya melihatnya di tempat lain juga. Saya telah melihat dan menyukai bagaimana beberapa perusahaan hanya menggunakan cap DateTime untuk BUILDNUMBER.
Steven Evers

4
+1: Formulir "MAJOR.MINOR.REVISION.BUILDNUMBER" dapat dimengerti dan masuk akal. Saya melihat formulir BUILDNUMBER.REVISION di situs MSDN (tautan diperbarui pada pertanyaan) dan itu benar-benar membingungkan saya.
A9S6

1
Aneh. Saya berharap revisi menjadi yang terakhir paling masuk akal - ini adalah angka yang akan (mungkin) paling berubah.
Izkata

1
@Izkata, sebenarnya nomor build paling banyak berubah, paling tidak cara kita menggunakannya di kontrak utama saya sekarang yang menggunakan kontrol versi ketat karena kami membuat perangkat medis. Revisi yang diperbarui menunjukkan bahwa telah ada perbaikan untuk perangkat lunak sebelumnya, yang perlu diuji oleh QA (Jaminan Kualitas). Ini adalah departemen yang sepenuhnya terpisah yang melakukan pengujian ekstensif selama tiga hari (per pedoman FDA). Jika mereka menemukan masalah, maka perubahan kode tambahan mungkin diperlukan yang membutuhkan bangunan baru (kompilasi ulang dan tautan) dan kemudian pengujian ulang, tetapi nomor revisi tetap sama.
tcrosley

@ tcrosley Saya kira itu adalah kasus terminologi yang tidak jelas. Saya sedang memikirkan revisi dalam kontrol versi.
Izkata

19

Seluruh kebingungan berasal dari semantik berbeda yang digunakan MS untuk "Build number" dan terutama "Revision". Istilah itu hanya berarti hal yang berbeda.

Sebagian besar orang (termasuk saya) menggunakan skema penomoran versi semantik di mana Anda hanya mendapatkan nomor BUILD yang lebih tinggi setiap kali Anda harus membuat bangunan baru dengan alasan apa pun. Bagi kami, perbaikan terbaru dianggap hanya perubahan kode lainnya, dan bagian BUILD meningkat secara otomatis setiap kali CI dijalankan. Modul dengan MAJ.MIN.REV yang sama dianggap dapat dipertukarkan, dan BUILD memberi tahu Anda yang mana yang terbaru.

Menambah REVISION, bagaimanapun, menunjukkan cabang rilis permanen baru, itu sebabnya kami menempatkannya sebelum BUILD. Kelemahan dari pendekatan itu adalah, bahwa kita mungkin mendapatkan urutan peristiwa berikut:

  • commit number 4711: Alice menambahkan fitur A
  • CI menghasilkan build 1.2.3.100
  • commit number 4712: Fitur yang dimodifikasi Bob B
  • commit number 4713: Alice memperbaiki fitur A ("perbaikan terbaru")
  • CI menghasilkan build 1.2.3.101

main.minor.revision.build

Seperti yang Anda lihat, perbaikan terbaru bukan satu-satunya perubahan yang ada di build berikutnya, juga modifikasi Bob menjadi bagian dari build itu. Jika Anda ingin menstabilkan cabang saat ini, Anda mungkin mengalami masalah karena Anda tidak pernah dapat memastikan apakah Bob hanya menambahkan banyak bug.

MS menggunakan kedua istilah ini secara berbeda. Nomor BUILD tidak secara otomatis bertambah, melainkan dapat dianggap sebagai jenis cabang rilis, untuk membekukan kode yang digunakan untuk versi kode tertentu. REVISION menunjukkan perubahan "panas" tambahan yang diterapkan pada cabang BUILD itu. Maka urutannya adalah sebagai berikut:

  • commit number 4711: Alice menambahkan fitur A ke trunk / master
  • Carl menciptakan cabang bangunan 1.2.100
  • CI menghasilkan build 1.2.100.0
  • commit number 4712: Bob memodifikasi fitur B di trunk / master
  • commit number 4713: Alice memperbaiki fitur A di 1.2.100cabang
  • CI menghasilkan build 1.2.100.1

major.minor.build.revision

Istilah REVISION dapat merujuk

  • sebuah produk revisi (itulah bagaimana kebanyakan orang menggunakannya)
  • revisi build harian tertentu (itulah yang dilakukan MS)

Perbedaan utama antara kedua proses adalah, apakah Anda ingin atau tidak kemampuan untuk menerapkan perbaikan terbaru untuk membangun CI dan dengan demikian, pada titik mana dalam proses cabang dibuat. Aspek ini menjadi penting ketika Anda ingin dapat memilih bangunan tertentu kapan saja setelah semua tes berhasil dan mempromosikan versi itu ke rilis resmi produk Anda berikutnya.

Dalam kasus kami, alat CI membuat tag repositori, jadi kami selalu memiliki informasi yang diperlukan siap digunakan, bila diperlukan. Dengan SVN menjadi lebih sederhana, karena tag dan cabang diimplementasikan persis dengan cara yang sama - tag tidak lebih dari cabang yang berada di bawah /tags.

Lihat juga

Dari bagian FAQ di strategi percabangan TFS :

Di cabang apa saya harus memperbaiki tiket P1 (hotfix)?

  • P1 harus diperbaiki di cabang yang paling dekat dengan basis kode yang berjalan di Produksi. Dalam hal ini P1 harus diperbaiki di cabang Prod. Dengan menerapkan perbaikan di cabang lain dan meluncurkan perubahan pada produksi Anda berisiko melepaskan kode setengah jadi atau belum teruji dari iterasi berikutnya.

  • Sekarang Anda dapat berdebat jika aman untuk bekerja secara langsung melawan cabang Prod, pikirkan lagi, P1 yang membutuhkan perhatian segera seharusnya tidak menjadi masalah mendasar dalam sistem. Dalam hal ini merupakan masalah mendasar, ia harus ditambahkan ke dalam simpanan Produk karena mungkin memerlukan analisis dan diskusi lebih lanjut dengan pelanggan.

Bacaan bagus lainnya adalah panduan percabangan TFS


Ini jawaban yang bagus! +1
Lankymart

16

Microsoft menjelaskan tujuan setiap komponen nomor versi .NET dalam dokumentasi MSDN mereka untuk Versionkelas. Inilah bagian yang relevan:

major.minor [.build [.revision]]

Komponen yang digunakan oleh konvensi adalah sebagai berikut:

Mayor: Sidang dengan nama yang sama tetapi versi utama yang berbeda tidak dapat dipertukarkan. Nomor versi yang lebih tinggi mungkin menunjukkan penulisan ulang utama suatu produk di mana kompatibilitas ke belakang tidak dapat diasumsikan.

Kecil: Jika nama dan nomor versi utama pada dua majelis adalah sama, tetapi nomor versi minor berbeda, ini menunjukkan peningkatan yang signifikan dengan maksud kompatibilitas ke belakang. Nomor versi minor yang lebih tinggi ini mungkin menunjukkan pelepasan poin suatu produk atau versi baru produk yang sepenuhnya kompatibel dengan produk.

Bangun: Perbedaan dalam nomor bilangan mewakili kompilasi ulang dari sumber yang sama. Nomor build yang berbeda dapat digunakan ketika prosesor, platform, atau kompiler berubah.

Revisi: Sidang dengan nama yang sama, nomor versi mayor, dan minor tetapi revisi yang berbeda dimaksudkan untuk sepenuhnya dapat dipertukarkan. Nomor revisi yang lebih tinggi dapat digunakan dalam membangun yang memperbaiki lubang keamanan di majelis yang dirilis sebelumnya.

http://msdn.microsoft.com/en-us/library/system.version.aspx


9
Ini membuat saya heran mengapa tidak ada yang tahu standar ini, setiap jawaban di sini mengklaim build berjalan di akhir dan tidak mengerti revisi itu sangat sederhana; itu berarti perbaikan terbaru. Anda merilis build, dan kemudian membuat build lebih lanjut, tetapi ketika Anda harus kembali dan memperbaikinya rilis Anda memperbarui revisi untuk menunjukkan membangun tertentu yang dirilis diubah untuk rilis baru
Jimmy Hoffa

2
Memberi +1 untuk jawaban yang memiliki nomor build yang dapat dibenarkan. Hanya menambah angka agak tidak berguna jika revisi tetap sama (kecuali jika Anda memiliki sistem build gila yang tergantung waktu). Menggunakan nomor build untuk sinyal apa compiler, platform, dll adalah berguna.
Thomas Eding

1
Buildsebagai recompilation of the same sourcetampaknya menjadi poin penting yang terlewatkan. Jika itu adalah perubahan kode (yang tidak memerlukan peningkatan Mayor / Minor baru) maka Revisionharus juga diubah.
PeterX

@PeterX Seperti dalam kasus perubahan khusus pembangunan saat penargetan ulang?
samis

4

Setidaknya ada beberapa hal berbeda yang dapat saya bayangkan referensi build number:

  1. Versi kontrol sumber yang dirilis. Misalnya jika ada rilis revisi # 12345, ini dapat dilacak dengan menjadikannya nomor build dan jika ditambal, revisi dapat naik karena bukan fungsi baru yang akan meningkatkan versi utama atau kecil dan nomor build harus diingat jika seseorang ingin menjalankan build itu lagi.

  2. Pengidentifikasi server integrasi berkelanjutan. Dalam kasus ini, server CI dapat memberi nomor pada setiap build yang dijalankannya dan dengan demikian nomor build adalah apa yang berhasil didapat dan bagian revisi tidak diperlukan dalam skenario ini.

Mungkin ada orang lain yang saya tidak tahu, tetapi ini adalah yang besar yang saya tahu ketika datang ke nomor pada basis kode.


4
+1 untuk # 1. Saya suka menggunakan revisi kontrol sumber #, karena membuatnya jauh lebih mudah untuk mencari bug yang dilaporkan terhadap versi itu dalam kontrol sumber.
Mason Wheeler

@MasonWheeler: berfungsi dengan baik jika Anda menggunakan SVN. Tetapi ketika Anda sampai di dcvs, tanah itu menjadi sangat deras. Ini akan menjadi satu hal yang paling saya rindukan dari svn yang akan saya tambahkan.
Wyatt Barnett

3

Nomor build biasanya bertambah di setiap build sehingga unik.

Demi kesederhanaan, beberapa set ulang nomor build setiap kali nomor UTAMA atau MINOR bertemu.

Sebagian besar mesin Integrasi Berkelanjutan memungkinkan untuk nomor bentukan unik yang dibuat secara otomatis.


2

Revisi dapat digunakan untuk tambalan bangunan. Katakanlah bahwa 2 tim mengerjakan suatu produk.

Tim 1 adalah tim pengembangan utama dan menghasilkan bangunan malam dengan skema versi 1.0.X.0 berikut, di mana X bertambah. Sekarang mereka berada di build 1.0.50.0 Team 2 mengambil build dari waktu ke waktu. Katakanlah mereka mengambil build dari minggu lalu yaitu 1.0.43.0 dan mulai menggunakannya. Tim 1 maju ke 1.0.51.0 ketika tim 2 menemukan masalah di 1.0.43.0.

Sekarang tim 1 akan mengambil bangunan itu (43), memperbaiki masalah dan menyediakan tim 2 dengan membangun 1.0.43.1. Perbaikan mungkin juga disebarkan di build utama, sehingga perubahan akan muncul di 1.0.52.0.

Semoga ini jelas dan bermanfaat.

* Revisi berguna ketika tidak semua orang yang terlibat dalam proyek menggunakan build yang sama dan Anda perlu menambal build tertentu.


2

Biarkan saya katakan bagaimana saya melihat dan menggunakannya ....

Versi ProgramName major.minor.build.revision

major: Bagi saya adalah proyek yang sedang saya kerjakan. Jumlahnya tidak akan berubah sampai saya memulai proyek baru dengan nama program yang sama. Ini berarti saya benar-benar akan menulis program baru dengan jenis kelamin yang sama (contoh: akses v1 - akses v-2 - akses v-3 * semua program yang sama tetapi sepenuhnya ditulis ulang).

minor: Ini berarti saya menambahkan fungsionalitas untuk proyek yang diterbitkan saat ini. Misalnya mungkin saya menambahkan kemampuan untuk mencetak tanda terima atau menambahkan kemampuan untuk mengimpor gambar. Pada dasarnya fungsi tambahan yang ingin saya tambahkan sekarang dan tidak menunggu rilis besar berikutnya untuk melakukannya.

build: Ini saya gunakan untuk menunjukkan perubahan yang sangat kecil dalam versi major.minor yang diterbitkan. Ini bisa berupa perubahan tata letak, skema warna, dll.

revisi: Ini saya gunakan untuk menunjukkan perbaikan bug pada may.minor.build yang diterbitkan saat ini - Ada saat-saat di mana saya tidak memajukan proyek saat ini dan bug muncul. Bug ini perlu diperbaiki dan dipublikasikan. Itu hanya berarti saya memperbaiki apa yang sudah saya terbitkan agar berfungsi dengan benar. Saya juga akan menggunakan ini jika saya sedang mengerjakan build baru, tambahan baru atau memulai versi utama baru. Versi yang diterbitkan jelas perlu ditambal sementara kami menunggu rilis mayor, minor, atau build berikutnya.

Jadi dengan cara ini proyek yang sudah jadi atau macet masih bisa diperbaiki dan dapat digunakan sampai rilis berikutnya diterbitkan.

Saya harap ini memberi seseorang pemahaman yang lebih baik tentang bagaimana jenis versi ini akan (atau seharusnya) bekerja. Bagi saya itu adalah satu-satunya definisi dan praktik yang membuat semua jenis akal nyata ketika menggunakan jenis versi ini.


1

Saya hanya pernah melihat nomor build sebagai nomor terakhir dalam ID rilis. Saya tidak yakin bagaimana Anda membuat revisi ke nomor build. Saya kira jika Anda mengubah beberapa sumber daya tidak dibangun (ikon, skrip DB, dll), mungkin, tetapi sebagian besar proyek yang saya kerjakan baru-baru ini memiliki semua hal di bawah kontrol versi juga, sehingga proses pembangunan mengambilnya ketika membuat penginstal / rilis. Saya suka nomor build bertanda waktu, meskipun tidak cukup seperti yang dijelaskan oleh @vid (saya suka major.minor.revision.HHMM). Namun, tempat saya bekerja, kami hanya menggunakan nomor urut yang dihasilkan oleh server build kami.


1

Seperti jkohlhepp, kami menggunakan bagian ketiga dari versi untuk menunjukkan nomor revisi di SubVersion dan yang keempat untuk menunjukkan nomor build dari server integrasi berkelanjutan kami (Jenkins untuk kami). Ini memberi kita beberapa manfaat - memiliki nomor versi yang ditetapkan oleh server CI kami menghapus langkah manual yang jika tidak sengaja dapat terlewatkan; mudah untuk memeriksa bahwa pengembang belum melakukan rilis nakal dari PC pengembangan mereka (yang akan menghasilkan angka-angka ini menjadi nol); dan itu memungkinkan kita untuk mengikat setiap perangkat lunak kembali ke kode yang dihasilkan dan pekerjaan CI yang membangunnya, hanya dengan melihat nomor versi - yang kadang-kadang kita temukan sangat berguna.


0

Apa pun yang Anda inginkan. Saya cenderung menggunakan year.month.day.hhmm untuk major.minor.build.revision. Jika saya menghasilkan lebih dari satu menit, ada yang salah. Anda bisa menggunakan kenaikan sederhana, atau saya telah melihat beberapa generator rumit untuk mereka. Apa yang Anda inginkan? Yang perlu mereka lakukan adalah membuatnya sehingga Anda sampai ke sumber yang digunakan untuk membuat output itu, jadi apa pun yang memungkinkan Anda untuk melakukan itu.


0

Dua digit terakhir adalah jumlah build total

1.01.2.1234

nomor build adalah 2.1234 namun kebanyakan orang hanya akan menggunakan 1.234 karena 2 bagian tidak sering berubah.


1
OP bertanya apa nomor build, bukan nomor build di ID revisi.
kiamlaluno

0

Tim kami menggunakan angka ketiga (revisi) sebagai nomor revisi dari repositori Subversion. Kami menggunakan angka keempat (build) sebagai nomor build dari server integrasi berkelanjutan TeamCity kami yang benar-benar menciptakan build. TeamCity membuat file AssemblyInfo baru dengan #s di dalamnya selama proses build.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.