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:

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

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.

Adiiis Benutzeravatar
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.

Docker gültige Bild-Tags

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.

Quelle

1450460cookie-checkEinen Git-Zweignamen in ein gültiges Docker-Image-Tag umwandeln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy