¿Cuáles son las mejores prácticas para el control de versiones de la etiqueta acoplable?

11

Recientemente conecté nuestros servidores CI para construir imágenes de acoplador en git commit.

Tenemos alrededor de 8 contenedores diferentes que se crean, cada uno con su propio lenguaje / framework. Algunos son nodos y tienen un paquete .json, otros son servicios de Python que no contienen información de versión semántica.

Mi pregunta no se trata de cómo crear etiquetas, se trata de crear los valores para la etiqueta.

¿Cómo asegurarse de que cada etiqueta tenga un número de versión semántico único para las imágenes específicas? ¿Quién debería ser la autoridad para rastrear / incrementar una versión de compilación?

Jack Murphy
fuente
¿Cuál es su enfoque actual para crear las etiquetas?
030
Se escucha ver lo que está preguntando. Usted dice "número de versión semántica", que debe ser humanamente asignado (nuestras IA no están lo suficientemente avanzadas como para decidir la semántica de una confirmación todavía ...). Pero luego preguntas sobre "incrementar una versión de compilación". Entonces, ¿en qué estás realmente interesado? ¿Quieres asegurarte de que las cosas solo "incrementen" (como un número de cambio de SCN / sistema o lo que sea)? ¿O le interesa el contenido semántico del número de versión (es decir, si tiene cambios incompatibles)?
AnoE

Respuestas:

6

Le dirigiría a mi registro de acoplamiento acoplable y control de fuente donde dmaze respondió desde los foros oficiales.docker.com . Comprometer hash y nombre de sucursal o etiquetas es suficiente.

En su Dockerfile, use una ETIQUETA para registrar el origen de la compilación. Eso probablemente incluye el hash de confirmación del control de origen distribuido (git, Mercurial), el nombre de la rama si es relevante, cualquier etiqueta de lanzamiento si está presente y posiblemente detalles como la marca de tiempo de la última confirmación. el historial del docker y la inspección del docker deberían poder mostrarlos.

Cuando la ventana acoplable empuje sus imágenes, empújelas al menos dos veces, con el hash de confirmación y con el nombre de la rama como parte de la "versión" (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test ) Si las etiquetas de lanzamiento están fácilmente disponibles, el sistema CI también debe enviar imágenes con estas etiquetas.

Actualmente estamos utilizando una combinación de nombre de sucursal / commit hash. Para nosotros eso parece ser suficiente. marcas de tiempo mientras son útiles IMO simplemente agregue desorden ya que no proporcionan nada que el hash commit no proporcione.

Estoy de acuerdo con 030 con respecto a:

quién debería ser la autoridad para rastrear / incrementar una versión de compilación

El 100% es responsabilidad del CI para mantener tales cosas, con una comunicación adecuada entre otros equipos.

Scott
fuente
1

¿Cómo asegurarse de que cada etiqueta tenga un número de versión semántico único para las imágenes específicas?

Se podría crear una etiqueta que consta de múltiples elementos, por ejemplo, una combinación de una marca de tiempo, git commit hash y una versión semántica. Este último tiene que configurarse manualmente, mientras que los dos primeros podrían automatizarse. Tal etiqueta podría verse de la siguiente manera:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4

Esta etiqueta contiene la fecha de compilación, el compromiso y la versión semántica. Si una imagen de Docker se ejecuta en producción y se encuentra un error, entonces se conoce la versión del producto, el código que está dentro y cuándo se creó la imagen y en qué circunstancias.

¿Quién debería ser la autoridad para rastrear / incrementar una versión de compilación?

En mi opinión, esto debería ser responsabilidad del CI, ya que es capaz de automatizar procesos y, dado que la creación de etiquetas podría automatizarse, dicha herramienta es la herramienta adecuada para el trabajo.

030
fuente
1

Supongo que utiliza una de las herramientas de DevOps para CI / CD como Jenkins, sugiero el siguiente enfoque,

Si usas algo como Jenkins

  • Puede configurar su trabajo de tal manera que pueda usar la variable de entorno Jenkins "BUILD_ID", que recupera la identificación de compilación del trabajo cuando se activa para etiquetarlo en su imagen. De esta manera, puede controlar la versión de sus imágenes acoplables. Por favor, consulte el siguiente ejemplo.

ex:- sudo docker build -t <image_name>:<BUILD_ID>

Entonces, si tiene un mecanismo similar a una etiqueta para su SCM, puede verificar la etiqueta en la ID de compilación respectiva, ya sea en compilaciones basadas en trabajos o en config.xml de la ID de compilación en JENKINS HOME_FOLDER.

Tezi
fuente