Qual è esattamente il numero di build in MAJOR.MINOR.BUILDNUMBER.REVISION


55

Quello che penso di Build Numbers è che ogni volta che viene creata una nuova build notturna, un nuovo BUILDNUMBER viene generato e assegnato a quella build. Quindi per la mia applicazione versione 7.0 le build notturne saranno 7.0.1, 7.0.2 e così via. È così? Allora a che serve una REVISIONE dopo il numero di build? Oppure la parte REVISIONE viene incrementata dopo ogni build notturno? Sono un po 'confuso qui ... ci riferiamo a ogni edificio notturno come COSTRUIRE ?

Il formato è menzionato qui: AssemblyVersion - MSDN


Quindi potresti usare la data come numero di build!

2
Build: ogni nuova build del sistema, Revision: Hotfix o "revisione" di una Build rilasciata, quindi perché altera la versione Build; La build corrente potrebbe essere la 2.2.12.0 ma la build rilasciata potrebbe essere la 2.2.8.0 e quando è necessario correggerla, si estrae il codice sorgente per la 2.2.8, lo si revisiona e si costruisce la 2.2.8.1, 3 mesi dopo la corrente è 2.2.16.0 ma un cliente è ancora in 2.2.8.1 e si imbatte in un altro bug, si estrae il codice per 2.2.8.1 e lo si modifica per correggere il bug e lo si rilascia come 2.2.8.2
Jimmy Hoffa

Risposte:


57

Non l'ho mai visto scritto in quella forma. Dove lavoro, stiamo usando il modulo MAJOR.MINOR.REVISION.BUILDNUMBER, in cui MAJOR è una versione principale (di solito molte nuove funzionalità o modifiche all'interfaccia utente o al sistema operativo sottostante), MINOR è una versione minore (forse alcune nuove funzionalità) su una versione principale precedente, REVISION è in genere una correzione per una versione secondaria precedente (nessuna nuova funzionalità) e BUILDNUMBER viene incrementato per ogni ultima build di una revisione.

Ad esempio, una revisione può essere rilasciata al QA (controllo di qualità) e restituiscono un problema che richiede una modifica. Il bug sarebbe stato corretto e riportato al QA con lo stesso numero REVISION, ma con BUILDNUMBER incrementato.


+1: Questo è praticamente il modo in cui l'ho visto anche altrove. Ho visto e apprezzato il modo in cui alcune aziende usano solo un timbro DateTime per BUILDNUMBER.
Steven Evers,

4
+1: il modulo "MAJOR.MINOR.REVISION.BUILDNUMBER" è comprensibile e ha senso. Ho visto il modulo BUILDNUMBER.REVISION sul sito MSDN (link aggiornato nella domanda) e mi ha confuso totalmente.
A9S6,

1
Dispari. Mi aspetto che la revisione sia l'ultima ad avere più senso: è il numero che (probabilmente) cambierà di più.
Izkata,

1
@Izkata, in realtà il numero di build cambia di più, almeno il modo in cui lo utilizziamo nel mio contratto principale in questo momento che utilizza un controllo rigoroso della versione perché stiamo realizzando dispositivi medici. Una revisione aggiornata indica che è stata apportata una correzione al software precedente, che deve essere testato dal QA (Quality Assurance). Questo è un dipartimento completamente separato che esegue test approfonditi per tre giorni (secondo le linee guida della FDA). Se riscontrano problemi, potrebbero essere necessarie ulteriori modifiche al codice che richiedono una nuova build (ricompilare e collegare) e quindi ripetere il test, ma il numero di revisione rimane lo stesso.
Tcrosley,

@tcrosley Immagino sia un caso di terminologia poco chiara. Stavo pensando a revisioni nel controllo delle versioni.
Izkata,

19

L'intera confusione deriva dalla diversa semantica che MS utilizza per "Build number" e in particolare "Revision". I termini significano solo cose diverse.

La maggior parte delle persone (me compreso) utilizza uno schema di numerazione delle versioni semantico in cui si ottiene semplicemente un numero BUILD più elevato ogni volta che è necessario creare una nuova build per qualsiasi motivo. Per noi, un aggiornamento rapido è considerato solo un'altra modifica del codice e la parte BUILD aumenta automaticamente ad ogni esecuzione di CI. I moduli con lo stesso MAJ.MIN.REV sono considerati intercambiabili e BUILD ti dice quale è il più recente.

La REVISIONE in aumento, tuttavia, indica un nuovo ramo di rilascio permanente, ecco perché lo posizioniamo prima di BUILD. L'aspetto negativo di questo approccio è che potremmo ottenere la seguente sequenza di eventi:

  • numero di commit 4711: Alice ha aggiunto la funzione A
  • CI produce la build 1.2.3.100
  • numero di commit 4712: Bob ha modificato la funzione B
  • numero di commit 4713: Alice ha risolto la funzione A ("hotfix")
  • CI produce la build 1.2.3.101

major.minor.revision.build

Come puoi vedere, l'aggiornamento rapido non è l'unica modifica contenuta nella build successiva, ma anche la modifica di Bob diventa parte di quella build. Se si desidera stabilizzare il ramo corrente, è possibile che si verifichino problemi poiché non si è mai sicuri se Bob abbia aggiunto o meno un mucchio di bug.

MS utilizza entrambi i termini in modo diverso. Il numero BUILD non viene incrementato automaticamente, ma può essere considerato come una specie di ramo di rilascio, per bloccare il codice utilizzato per una particolare versione del codice. REVISION indica ulteriori modifiche "attive" applicate a quel ramo BUILD. La sequenza sarebbe quindi la seguente:

  • numero di commit 4711: Alice ha aggiunto la funzione A al trunk / master
  • Carl crea il ramo build 1.2.100
  • CI produce build 1.2.100.0
  • numero di commit 4712: Bob ha modificato la funzione B nel trunk / master
  • numero di commit 4713: Alice ha corretto la funzione A nel 1.2.100ramo
  • CI produce la build 1.2.100.1

major.minor.build.revision

Il termine REVISIONE può riferirsi a

  • una revisione del prodotto (è così che la maggior parte delle persone lo usa)
  • una revisione di una particolare build giornaliera (ecco cosa fa la SM)

La differenza chiave tra i due processi è, indipendentemente dal fatto che si desideri o meno la possibilità di applicare gli hotfix ai build degli elementi della configurazione e, quindi, a che punto del processo viene creato il ramo. Questo aspetto diventa importante quando vuoi essere in grado di scegliere una particolare build in qualsiasi momento dopo che tutti i test hanno avuto successo e promuovere esattamente quella versione alla prossima versione ufficiale del tuo prodotto.

Nel nostro caso lo strumento CI crea un tag repository, quindi abbiamo sempre le informazioni necessarie pronte per l'uso, quando necessario. Con SVN diventa ancora più semplice, perché i tag e i rami sono implementati esattamente allo stesso modo: un tag non è altro che un ramo situato sotto /tags.

Guarda anche

Dalla sezione FAQ della strategia di diramazione TFS :

In quale ramo devo riparare il ticket P1 (hotfix)?

  • Il P1 dovrebbe essere corretto nel ramo più vicino alla base di codice in esecuzione in Produzione. In questo caso il P1 dovrebbe essere riparato nel ramo Prod. Applicando la correzione in qualsiasi altra filiale e implementando le modifiche alla produzione, si rischia di rilasciare codice semilavorato o non testato dalle successive iterazioni.

  • Ora puoi discutere se è sicuro lavorare direttamente contro il ramo Prod, ripensaci, un P1 che richiede attenzione immediata non dovrebbe essere un problema fondamentale nel sistema. Nel caso in cui si tratti di un problema fondamentale, è necessario aggiungerlo all'arretrato di prodotto poiché potrebbe richiedere ulteriori analisi e discussioni con il cliente.

Un'altra buona lettura è la guida alle ramificazioni TFS


Questa è un'ottima risposta! +1
Lankymart,

16

Microsoft descrive lo scopo di ciascun componente di un numero di versione .NET nella documentazione MSDN per la Versionclasse. Ecco la parte pertinente:

major.minor [.build [.revision]]

I componenti vengono utilizzati per convenzione come segue:

Maggiore: gli assiemi con lo stesso nome ma diverse versioni principali non sono intercambiabili. Un numero di versione superiore potrebbe indicare una riscrittura maggiore di un prodotto in cui non è possibile ipotizzare la compatibilità con le versioni precedenti.

Minore: se il nome e il numero di versione principale su due assiemi sono uguali, ma il numero di versione minore è diverso, ciò indica un miglioramento significativo con l'intenzione di compatibilità con le versioni precedenti. Questo numero di versione minore superiore potrebbe indicare una versione puntuale di un prodotto o una nuova versione di un prodotto completamente compatibile con le versioni precedenti.

Build: una differenza nel numero di build rappresenta una ricompilazione della stessa fonte. Numeri di build diversi potrebbero essere utilizzati quando il processore, la piattaforma o il compilatore cambiano.

Revisione: gli assiemi con lo stesso nome, numeri di versione maggiore e minore ma revisioni diverse devono essere completamente intercambiabili. Un numero di revisione superiore potrebbe essere utilizzato in una build che risolve un problema di sicurezza in un assembly precedentemente rilasciato.

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


9
Mi sorprende il motivo per cui nessuno conosce questo standard, ogni risposta qui afferma che la build va alla fine e non capisce che la revisione è molto semplice; significa hotfix. Rilasci una build e quindi crei ulteriori build, ma quando devi tornare indietro e correggere quella versione aggiorni la revisione per mostrare che la build particolare che è stata rilasciata è stata modificata per una nuova versione
Jimmy Hoffa,

2
+1 per una risposta che ha un numero di build giustificabile. Aumentare semplicemente il numero è piuttosto inutile se la revisione rimane invariata (a meno che non si disponga di un sistema di build folle che dipende dal tempo). Usare il numero di build per segnalare quale compilatore, piattaforme, ecc. È utile.
Thomas Eding,

1
Buildcome recompilation of the same sourcesembra essere un punto importante che ci manca. Se si tratta di una modifica del codice (che non richiede un nuovo aumento maggiore / minore), è Revisionnecessario modificare anche questo.
PeterX,

@PeterX Come nel caso di modifiche specifiche della build quando si effettua il targeting?
samis

4

Ci sono almeno un paio di cose diverse che potrei immaginare il riferimento al numero di build:

  1. Versione di controllo del codice sorgente rilasciata. Ad esempio, se è stata rilasciata una versione della revisione # 12345, è possibile tenere traccia di questo numero disponendo del numero di build e se è stato corretto il patch è il punto in cui le revisioni potrebbero aumentare in quanto non sono nuove funzionalità che aumenterebbero le versioni principali o secondarie e il numero di build deve essere ricordato nel caso in cui qualcuno voglia eseguire nuovamente quella build.

  2. Identificatore del server di integrazione continua. In questo caso, il server CI può numerare ogni build che esegue e quindi il numero di build è ciò che ottiene una build di successo e la parte di revisione non è necessaria in questo scenario.

Potrebbero essercene altri che non conosco, ma questi sono quelli grandi che conosco quando si tratta di numeri su basi di codice.


4
+1 per il n. 1. Mi piace usare il numero di revisione del controllo del codice sorgente, perché rende molto più semplice la ricerca di bug segnalati rispetto a quella versione nel controllo del codice sorgente.
Mason Wheeler,

@MasonWheeler: funziona alla grande se sei su SVN. Ma quando arrivi a dcvs land diventa assurdo. Questa sarebbe una cosa che mi manca di più di svn che aggiungerò.
Wyatt Barnett,

3

Un numero di build viene generalmente incrementato ad ogni build, quindi è univoco.

Per semplicità, alcuni ripristinano il numero di build ogni volta che i numeri MAJOR o MINOR vengono eliminati.

La maggior parte dei motori di integrazione continua consente numeri di build univoci generati automaticamente.


2

La revisione può essere utilizzata per le patch delle build. Diciamo che 2 team lavorano su un prodotto.

Il team 1 è il principale team di sviluppo e produce build notturne con la seguente versione schema 1.0.X.0, in cui X viene incrementato. Ora sono alla build 1.0.50.0 Il Team 2 sta eseguendo una build di volta in volta. Diciamo che prendono la build della scorsa settimana che è 1.0.43.0 e iniziano a usarla. La squadra 1 avanza a 1.0.51.0 quando la squadra 2 rileva un problema in 1.0.43.0.

Ora il team 1 prenderà quella build (43), risolverà il problema e fornirà alla team 2 la build 1.0.43.1. La correzione potrebbe anche essere propagata nella build principale, quindi la modifica verrà visualizzata in 1.0.52.0.

Spero che questo sia chiaro e utile.

* La revisione è utile quando non tutte le persone coinvolte nel progetto usano la stessa build e devi correggere patch per build specifiche.


2

Lasciami dire come la vedo e la uso ....

Versione ProgramName major.minor.build.revision

major: Per me è l'attuale progetto a cui sto lavorando. Il numero non cambierà finché non avvierò un nuovo progetto con lo stesso nome di programma. Questo significa che scriverò letteralmente un nuovo programma dello stesso genere (esempio: accesso v1 - accesso v-2 - accesso v-3 * tutto lo stesso programma ma completamente riscritto).

minore: questo significa che sto aggiungendo funzionalità al progetto pubblicato corrente. Ad esempio, forse ho aggiunto la possibilità di stampare una ricevuta o la possibilità di importare immagini. Fondamentalmente funzionalità aggiuntive che voglio aggiungere ora e non aspettare che la prossima versione principale lo faccia.

build: utilizzo questo per indicare cambiamenti molto piccoli nella versione major.minor pubblicata. Questo potrebbe essere un cambiamento nel layout, nella combinazione di colori, ecc.

revisione: utilizzo questo per indicare una correzione di bug nell'attuale major.minor.build pubblicato - Ci sono occasioni in cui non sto avanzando il progetto corrente e si presenta un bug. Questo bug deve essere corretto e pubblicato. Significa solo che sto riparando ciò che ho già pubblicato per funzionare correttamente. Lo userei anche se sto lavorando su una nuova build, una nuova aggiunta o se ho avviato una nuova versione principale. La versione pubblicata deve ovviamente essere patchata mentre stiamo aspettando la prossima versione principale, minore o build.

Quindi in questo modo un progetto finito o bloccato può ancora essere risolto e reso utilizzabile fino alla pubblicazione della prossima versione.

Spero che ciò dia a qualcuno una migliore comprensione di come questo tipo di versioning dovrebbe (o dovrebbe) funzionare. Per me è l'unica definizione e pratica che ha un senso reale quando si utilizza questo tipo di controllo delle versioni.


1

Ho sempre visto un numero di build come l'ultimo numero nell'ID di rilascio. Non sono sicuro di come faresti con una revisione di un numero di build. Suppongo che se hai cambiato alcune delle risorse non costruite (icone, script DB, ecc.), Forse, ma la maggior parte dei progetti su cui ho lavorato di recente ha anche tutte quelle cose sotto il controllo della versione, quindi il processo di compilazione le raccoglie quando rendendo il programma di installazione / rilascio. Mi piacciono i numeri di build timestamp, anche se non esattamente come descrive @David (mi piace major.minor.revision.HHMM). Tuttavia, dove lavoro, usiamo solo un numero sequenziale generato dal nostro server di build.


1

Come jkohlhepp, utilizziamo la terza parte della versione per mostrare il numero di revisione in SubVersion e la quarta per mostrare il numero di build dal nostro server di integrazione continua (Jenkins per noi). Questo ci offre diversi vantaggi: avere il numero di versione impostato dal nostro server CI rimuove un passaggio manuale che altrimenti potrebbe essere perso accidentalmente; è facile verificare che uno sviluppatore non abbia rilasciato una versione sfacciata dal proprio PC di sviluppo (il che comporterebbe che questi numeri fossero zero); e ci consente di ricollegare qualsiasi parte del software sia al codice da cui è stato generato sia al lavoro CI che lo ha creato, semplicemente guardando il numero di versione - che a volte troviamo molto utile.


0

È qualunque cosa tu voglia che sia. Tendo a usare year.month.day.hhmm per la mia major.minor.build.revision. Se ne produco più di uno al minuto, qualcosa non va. puoi semplicemente usare un semplice incremento o ho visto alcuni generatori elaborati per loro. Che cosa si vuole che sia. Quello che devono fare è farlo in modo da arrivare alla fonte utilizzata per creare quell'output, quindi qualunque cosa ti permetta di farlo.


0

Le ultime due cifre rappresentano il numero totale di build

1.01.2.1234

il numero di build è 2.1234, tuttavia la maggior parte delle persone utilizzerà solo 1234 poiché la parte 2 non cambia frequentemente.


1
L'OP chiede quale sia il numero di build, non quale sia il numero di build nell'ID di revisione.
kiamlaluno,

0

Il nostro team utilizza il terzo numero (revisione) come numero di revisione dal repository Subversion. Usiamo il quarto numero (build) come numero di build dal nostro server di integrazione continua TeamCity che crea effettivamente la build. TeamCity crea un nuovo file AssemblyInfo con gli # giusti al suo interno durante il processo di compilazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.