Convertir un nombre de rama de git en una etiqueta de imagen de ventana acoplable válida

2 minutos de lectura

Parte de nuestro flujo de trabajo de CI/CD etiqueta las imágenes de Docker con el nombre de la rama de git. Sin embargo, el conjunto de caracteres válidos para las etiquetas de Docker es más pequeño que el conjunto de caracteres válidos para un nombre de rama de git.

Como un ejemplo muy simple, el nombre de la rama bugfix/my_awesome_feature no es una etiqueta válida:

docker build . -t image_name:$(git rev-parse --abbrev-ref HEAD)

Falla con el error de que “no es un repositorio/etiqueta válido: formato de referencia no válido”.

Lo mismo con nombres de sucursales más complicados: fix/bug#123, pr@123etc….

¿Cuál es la mejor manera de convertir un nombre de rama de git en una etiqueta docker válida? Ignorar o reemplazar todos los caracteres no válidos está bien.

Avatar de usuario de Adiii
Adiii

La etiqueta Docker no permite la mayoría de los caracteres especiales excepto -,_,..

El nombre de una etiqueta debe ser ASCII válido y puede contener letras mayúsculas y minúsculas, dígitos, guiones bajos, puntos y guiones. Un nombre de etiqueta no puede comenzar con un punto o un guión y puede contener un máximo de 128 caracteres.

etiquetas de imagen válidas de docker

Entonces puedes reemplazar todos los caracteres especiales con -. a nombre de su Sucursal.

docker build . -t image_name:$(git rev-parse --abbrev-ref HEAD | sed 's/[^a-zA-Z0-9]/-/g') 

Entonces la siguiente rama se convertirá en

fix/bug#123 -> fix-bug-123  
pr@123 -> pr-123

Puedes reemplazar - con guiones bajos, puntos y guiones

#to use `_`
sed 's/[^a-zA-Z0-9]/_/g'

  • terminé quedándome solo los caracteres permitidos (alfanuméricos, puntos, guiones y guiones bajos) con: sed 's/[^[:alnum:]\.\_\-]/-/g'. Todo lo demás se convierte en un guión aquí.

    – Félix

    25 sep 2020 a las 20:55

  • ¿Cómo hacerlo en GitLab ci/cd?

    – catscoolzhyk

    12 de noviembre de 2020 a las 14:47

  • @catscoolzhyk en Gitlib puedes usar CI_COMMIT_REF_SLUG en lugar del nombre de la sucursal para evitar una solución alternativa. “$CI_COMMIT_REF_NAME en minúsculas, acortado a 63 bytes, y con todo excepto 0-9 y az reemplazados con -. Sin inicial ni final -. Úselo en URL, nombres de host y nombres de dominio” docs.gitlab.com/ee/ci/variables/predefined_variables.html

    – Adiiii

    13 de noviembre de 2020 a las 2:21

Al usar GitLab CI, puede usar una variable predefinida CI_COMMIT_REF_SLUGdescripción:

$CI_COMMIT_REF_NAME en minúsculas, acortado a 63 bytes, y con todo excepto 0-9 y a-z reemplazadas con -. Sin inicio / seguimiento -. Úselo en URL, nombres de host y nombres de dominio.

Fuente

¿Ha sido útil esta solución?