Estaba explicando un sistema de construcción propuesto (Gradle / Artifactory / Jenkins / Chef) a uno de nuestros arquitectos principales, y él me hizo un comentario con el que estoy en desacuerdo, pero no tengo la experiencia suficiente para considerarlo.
Este proyecto construye una biblioteca Java (JAR) como un artefacto para ser reutilizado por otros equipos. Para el control de versiones, me gustaría utilizar el enfoque semántico de:
<major>.<minor>.<patch>
Donde patch
indica correcciones de errores / emergencias, minor
indica versiones compatibles con versiones anteriores e major
indica refactorizaciones masivas de la API y / o cambios incompatibles con versiones anteriores.
En cuanto a la entrega, aquí es lo que quiero: un desarrollador confirma algo de código; Esto desencadena una compilación en un entorno QA / TEST. Se ejecutan algunas pruebas (algunas automatizadas, algunas manuales). Si todas las pruebas pasan, entonces una versión de producción publica el JAR en nuestro repositorio interno. En este punto, el JAR debería tener una versión adecuada, y mi intención era utilizar el build.number
que se genera y proporciona automáticamente nuestra herramienta de CI para actuar como el número de parche.
Por lo tanto, el versionado en realidad sería:
<major>.<minor>.<build.number>
Una vez más, dónde build.number
lo proporciona la herramienta CI.
El arquitecto descartó esto, diciendo que usar el número de compilación de CI era un "abuso" de las versiones semánticas.
Mi pregunta es: ¿es correcto? Y si es así, ¿por qué? Y si no, ¿Pórque no?