我们的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标签的最佳方法是什么? 忽略或替换所有无效字符都可以。
sed 's/[^[:alnum:]\.\_\-]/-/g'
。其他所有字符都会在此处转换为破折号。 - FelixCI_COMMIT_REF_SLUG
代替分支名称以避免解决方法。 "$CI_COMMIT_REF_NAME" 是小写的,缩短为63个字节,并用除了 0-9 和 a-z 以外的所有字符替换为“-”。没有领先/尾随的“-”。可在 URL、主机名和域名中使用。详情请见:https://docs.gitlab.com/ee/ci/variables/predefined_variables.html。 - Adiii