Gitflow branch与Docker image tag命名冲突怎么办?

简介: 本文基本没啥技能点, 单纯记录在Devops路上的一个小插曲,前人栽树后人乘凉

在前公司,我根据主流的git flow 给团队搭建了一套devops流程,运行在 docker & k8s上。


19e39950a9ef9ad9b85f5677f72641c2.png


在现代devops流程中,一般推荐使用git分支名或者git tag作为镜像的tag名


在实际操作中, 我遇到了一个流程阻塞。


根据git flow的规范,我们一般会打出feature/xxx, fix/issue234,   release/x.x.x 这样的分支名, 当然我们还会产生x.y.z 这样的git tag名。


但是docker build  -t产生镜像tag的规定,除了-,_,.镜像tag不允许使用其他特殊字符


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


我当时是让团队小伙伴不要打出含有 /的分支名, 改用其他,如上图中所示的release-1.0.0等,但是我始终觉得不是一个常规操作,因为这破坏了一以贯之的git flow命名规范,而且需要在团队内做技术性约束


当git flow分支命名与docker image tag分支有冲突,该怎么办?


面向谷歌编程,面向Stackoverflow[1]编程啊。


01

脚本替换


在Gitlab-ci流程中,我们使用shell脚本转换为release-v1-0-1:


docker build . -t image_name:$CI_COMMIT_REF_NAME | sed 's/[^a-zA-Z0-9]/-/g'


CI_COMMIT_REF_NAME: The branch or tag name for which project is built.


02

gitlab-ci内置变量CI_COMMIT_REF_SLUG


可能Gitlab-ci早就关注到这个问题, 在9.0 给出了一个CI_COMMIT_REF_SLUG变量。


CI_COMMIT_REF_SLUG :CI_COMMIT_REF_NAME in lowercase, shortened to 63 bytes, and with everything except 0-9 and a-z replaced with -. No leading / trailing -. Use in URLs, host names and domain names.


很明显,CI_COMMIT_REF_SLUG[2] 是最优解,完美规避了gitflow branch和Docker image tag的命名冲突。


本文基本没啥技能点, 单纯记录在Devops路上的一个小插曲,前人栽树后人乘凉;


顺便表明一个态度,希望在流畅、自然的开发流程上深耕。


相关文章
|
7月前
|
Linux Docker 容器
「Docker」M1 Pro 打包docker image问题合集
「Docker」M1 Pro 打包docker image问题合集
|
5月前
|
Docker 容器
docker重命名镜像名称以及tag版本
docker重命名镜像名称以及tag版本
227 0
|
9月前
|
Docker 容器
27-Docker-常用命令详解-docker tag
27-Docker-常用命令详解-docker tag
|
9月前
|
安全 API Docker
docker image的发布
docker image的发布
60 0
|
7月前
|
程序员 数据安全/隐私保护 开发者
Docker中容器的随机命名方式
Docker中容器的随机命名方式
70 0
|
9月前
|
Java Linux Docker
Docker image设计与Linux哲学的关系
最近在阅读Linux 系统编程手册。
45 0
|
9月前
|
Java 持续交付 Docker
IDEA自动化部署Docker Image
通常项目上容器后,通过docker的方式来启动系统,需要经过一系列相关操作,例如:编译、打jar包、打镜像、发布、部署及启动等阶段。在各种自动化工具的出现,对打包、部署等工作带来了便利,一般交给git+Jenkins或者gitlab方式进行自动化部署。 然而,在项目开发、调试阶段,需要借助开发平台进行相关操作。本文主要讲述:如何在IDEA中通过插件来部署docker项目,以方便开发阶段的调试部署工作。
95 0
|
10月前
|
数据采集 数据挖掘 UED
使用RSelenium和Docker Standalone Image进行网页抓取的技术和注意事项
网页抓取是一种从网站上提取数据的技术,对于数据分析、市场调查和竞争情报等目的至关重要。RSelenium作为一个功能强大的R包,通过Selenium WebDriver实现了对浏览器的控制,能够模拟用户的行为,访问和操作网页元素。而Docker Standalone Image是一个容器化的Selenium服务器,无需额外安装依赖,可以在任何支持Docker的平台上运行。
|
11月前
|
JavaScript Ubuntu 关系型数据库
docker 下安装常用 image
docker 下安装常用 image
102 0