我们的 CI/CD 工作流的一部分使用 git 分支的名称标记 Docker 镜像。但是,docker 标签的有效字符集小于 git 分支名称的有效字符集。
作为一个非常简单的例子,分支名称 bugfix/my_awesome_feature
不是有效标签:
docker build . -t image_name:$(git rev-parse --abbrev-ref HEAD)
失败,错误是“不是有效的存储库/标签:无效的引用格式”。与更复杂的分支名称相同:
fix/bug#123
, pr@123
, 等等....将 git 分支名称转换为有效的 docker 标签的最佳方法是什么? 忽略或替换所有无效字符很好。
最佳答案
Docker 标签不允许除 -,_,.
之外的大多数特殊字符.
A tag name must be valid ASCII and may contain lowercase and uppercase letters, digits, underscores, periods and dashes. A tag name may not start with a period or a dash and may contain a maximum of 128 characters.
docker valid image tags
所以你可以用
-
替换所有特殊字符.在您的分支机构名称中。docker build . -t image_name:$(git rev-parse --abbrev-ref HEAD | sed 's/[^a-zA-Z0-9]/-/g')
所以下面的分支会变成fix/bug#123 -> fix-bug-123
pr@123 -> pr-123
您可以更换 -
与 下划线、句点和破折号 #to use `_`
sed 's/[^a-zA-Z0-9]/_/g'
关于git - 将 git 分支名称转换为有效的 docker 镜像标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62905914/