Stavo spiegando un sistema di costruzione proposto (Gradle / Artifactory / Jenkins / Chef) a uno dei nostri architetti senior, e mi ha fatto un commento con cui non sono d' accordo, ma non ho abbastanza esperienza per pesare davvero.
Questo progetto crea una libreria Java (JAR) come artefatto per essere riutilizzata da altri team. Per il controllo delle versioni, vorrei utilizzare l'approccio semantico di:
<major>.<minor>.<patch>
Dove patch
indica correzioni di bug / emergenze, minor
indica versioni compatibili con le versioni precedenti e major
indica un massiccio refactoring dell'API e / o modifiche incompatibili con le versioni precedenti.
Per quanto riguarda la consegna, ecco cosa voglio: uno sviluppatore impegna del codice; questo innesca una build in un ambiente QA / TEST. Vengono eseguiti alcuni test (alcuni automatizzati, altri manuali). Se tutti i test vengono superati, una build di produzione pubblica il JAR nel nostro repository interno. A questo punto il JAR dovrebbe essere aggiornato correttamente e il mio pensiero era quello di utilizzare build.number
quello generato automaticamente e fornito dal nostro strumento CI per agire come numero di patch.
Pertanto, il controllo delle versioni sarebbe effettivamente:
<major>.<minor>.<build.number>
Ancora una volta, dove build.number
viene fornito dallo strumento CI.
L'architetto lo ha respinto, affermando che l'uso del numero di build CI era un "abuso" del versioning semantico.
La mia domanda è: è corretto, e se sì, perché? E se no, perché no?