Einen Git-Zweignamen in ein gültiges Docker-Image-Tag umwandeln
Lesezeit: 2 Minuten
Ein Teil unseres CI/CD-Workflows markiert Docker-Images mit dem Namen des Git-Zweigs. Allerdings ist der Satz gültiger Zeichen für Docker-Tags kleiner als der Satz gültiger Zeichen für einen Git-Branch-Namen.
Als sehr einfaches Beispiel der Filialname bugfix/my_awesome_feature ist kein gültiges Tag:
Schlägt mit der Fehlermeldung fehl, dass es sich um „kein gültiges Repository/Tag: ungültiges Referenzformat“ handelt.
Das Gleiche gilt für kompliziertere Filialnamen: fix/bug#123, pr@123usw….
Was ist der beste Weg, um einen Git-Branch-Namen in ein gültiges Docker-Tag umzuwandeln? Es ist in Ordnung, alle ungültigen Zeichen zu ignorieren oder zu ersetzen.
Adiii
Das Docker-Tag erlaubt die meisten Sonderzeichen nicht, außer -,_,..
Ein Tag-Name muss im gültigen ASCII-Format vorliegen und darf Klein- und Großbuchstaben, Ziffern, Unterstriche, Punkte und Bindestriche enthalten. Ein Tag-Name darf nicht mit einem Punkt oder Bindestrich beginnen und darf maximal 128 Zeichen enthalten.
So können Sie alle Sonderzeichen durch ersetzen -. in Ihrem Filialnamen.
docker build . -t image_name:$(git rev-parse --abbrev-ref HEAD | sed 's/[^a-zA-Z0-9]/-/g')
So entsteht der folgende Zweig
fix/bug#123 -> fix-bug-123
pr@123 -> pr-123
Sie können ersetzen - mit Unterstriche, Punkte und Bindestriche
#to use `_`
sed 's/[^a-zA-Z0-9]/_/g'
Am Ende habe ich es behalten nur die zulässigen Zeichen (alphanumerisch, Punkte, Bindestriche und Unterstriche) mit: sed 's/[^[:alnum:]\.\_\-]/-/g'. Alles andere wird hier in einen Bindestrich umgewandelt.
– Felix
25. September 2020 um 20:55 Uhr
Wie erstelle ich es in GitLab ci/cd?
– catscoolzhyk
12. November 2020 um 14:47 Uhr
@catscoolzhyk in Gitlib, das Sie verwenden können CI_COMMIT_REF_SLUG anstelle des Filialnamens, um eine Problemumgehung zu vermeiden. „$CI_COMMIT_REF_NAME in Kleinbuchstaben geschrieben, auf 63 Byte gekürzt und alles außer 0-9 und az durch – ersetzt. Kein führendes/nachgestelltes –. Verwendung in URLs, Hostnamen und Domänennamen.“ docs.gitlab.com/ee/ci/variables/predefined_variables.html
– Adiii
13. November 2020 um 2:21
Bei der Verwendung von GitLab CI können Sie eine vordefinierte Variable verwenden CI_COMMIT_REF_SLUGBeschreibung:
$CI_COMMIT_REF_NAME in Kleinbuchstaben geschrieben, auf 63 Bytes gekürzt und mit allem außer 0-9 Und a-z Ersetzt mit -. Kein Vor-/Nachlauf. Verwendung in URLs, Hostnamen und Domänennamen.