Stavo spiegando un sistema di costruzione proposto (Gradle / Artifactory / Jenkins / Chef) a uno dei nostri architetti più anziani, e mi ha fatto un commento che I sorta di non sono d'accordo, ma non sono abbastanza esperto da poter davvero pesare.
Questo progetto costruisce una libreria Java (JAR) come un artefatto da riutilizzare da altri team. Per il controllo delle versioni, mi piacerebbe utilizzare l'approccio semantico di:
<major>.<minor>.<patch>
Dove patch
indica correzioni di errori / emergenze, minor
indica versioni compatibili all'indietro e major
indica sia i massimi refactoring dell'API e / o le modifiche non compatibili all'indietro.
Per quanto riguarda la consegna, ecco quello che voglio: uno sviluppatore commette un codice; questo innesca una build in un ambiente QA / TEST. Alcuni test sono eseguiti (alcuni automatizzati, alcuni manuali). Se tutti i test passano, un build di produzione pubblica la JAR sul nostro repository interno. A questo punto, il JAR dovrebbe essere versionato correttamente, e il mio pensiero è stato quello di usare il build.number
generato automaticamente e fornito dal nostro strumento CI per fungere da numero di patch.
Pertanto, il controllo delle versioni sarebbe in realtà:
<major>.<minor>.<build.number>
Ancora, dove build.number
è fornito dallo strumento CI.
L'architetto ha respinto questo, dicendo che l'uso del numero di build dell'elemento della configurazione era un "abuso" del controllo delle versioni semantico.
La mia domanda è: è corretto, e in tal caso, perché? E se no, perché no?