git - 将 git 分支名称转换为有效的 docker 镜像标签

标签 git docker

我们的 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/

相关文章:

git - 我如何吹走我解决 git 冲突的尝试

git - 是否可以为每个 Remote 设置单独的 git ignore 规则?

通过 ssh 从远程存储库 :fatal: protocol error: bad line length character: fata 进行 git 克隆

Docker服务因依赖而无法启动

node.js - 在 Docker : Libpq dependency Exec format error 中将 sequelize 与 Postgresql 一起使用

java - 通过选择源而不是源 Jar 选择 Git 存储库/源目录

git - 在 git show/git diff 中将 tabwidth 设置为 4

apache - 如何使 docker 应用程序使用端口 80 (http) 而不是 443 (https)

java - Docker 容器中 PostgreSQL 数据库的正确 JDBC 连接 URL

docker - 将图像推送到Docker Hub