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@123
etc….
¿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.
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_SLUG
descripción:
$CI_COMMIT_REF_NAME
en minúsculas, acortado a 63 bytes, y con todo excepto0-9
ya-z
reemplazadas con-
. Sin inicio / seguimiento -. Úselo en URL, nombres de host y nombres de dominio.