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?
Una razón es que el parche puede requerir varias compilaciones, por lo que si tiene la versión 5.7 y desea parchearlo a 5.7.1, pero sus primeras 2 correcciones de errores no se compilan cuando se envían al sistema CI, entonces será a 5.7.3 antes de lanzar su primer parche!
La respuesta es simplemente usar 4 dígitos (como suelen tener los sistemas de Microsoft). El cuarto es un número de compilación y se usa "solo para información". En general, las personas ponen el número de versión del repositorio allí (si usan SVN o TFS o similar), lo cual es realmente bueno, ya que puede verificar qué confirmación exacta se usó para construir los binarios. Si no tiene tal cosa, entonces el número de compilación de CI es una aproximación razonable (ya que esperaría que su sistema de CI pueda recordar los números de compilación y vincularlo al historial de repositorios, pero no depende del CI sistema recordándolos: nunca puede eliminar compilaciones antiguas).
Una cosa a tener en cuenta, el esquema de Microsoft para el control de versiones utiliza la tercera posición para los números de compilación. Chrome usa solo 1 número. Ubuntu usa la fecha. No hay un "estándar" para usar , excepto que todos los números deben incrementarse.
fuente