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

610502a760b5688eb1d1adeb888a58df.gif

谷歌还是比必应要好用一点。

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

9457db114389bf4dbeaf9e9d50f48f1a.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路上的一个小插曲,前人栽树后人乘凉;

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

后续大家有意的话,可以结合 《基于容器和K8s的 Devops 探索和落地实践》 了解一个常规/有效/可落地的Devops流程。

引用链接

[1] Stackoverflow: https://stackoverflow.com/questions/62905914/turning-a-git-branch-name-into-a-valid-docker-image-tag
[2] CI_COMMIT_REF_SLUG: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 安装 php

按照 Unofficial Ubuntu 6.06 (Dapper Drake) Linux Starter Guide的步骤来 一、安装Apache2 sudo apt-get install apache2 然后在Firefox中打开: http://localhost/ 提示成功 安装完毕后,接下来就要启动Apache了 如果只是用于本地开发,加强安全性&…

测试你的Python 水平----6

为什么80%的码农都做不了架构师?>>> 1、问:简述python中unicode和utf-8的关系?常用的函数有哪些?答:unicode是一个字符编码集合,定义每个字符的唯一编码;utf-8则是unicode的一种实现…

970页绝版资料!初高中数学与竞赛知识点+方法技巧,由苏步青当顾问,众多一线名师共同编写!...

全世界只有3.14 % 的人关注了爆炸吧知如何才能学好数学?我国著名数学家苏步青先生曾说:"要学好数学,方法不外乎打好基础,多做习题,多加思索和分析”。为了帮助大家学好数学,今天,超模君要给…

使用WTMPlus快速搭建发卡网

快点关注我们吧作者介绍不倔强的草莓,从事互联网乞讨行业多年,深入了解乞讨业务。开发过草莓要饭网等系统。对互联网乞讨的运营有一定经验。什么是WTM框架?WTM框架是一款.NET平台下的开源快速开发框架,可以快速、灵活、高效的开发一个基于.NE…

mysql老叶博客_MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】

MySQL binlog后面的编号最大是多大?具体文章请关注微信公众号:izhishuedu 【知数堂】 知数堂版权所有。这里我就不啰嗦了,直接上贴代码:版本:5.7.18mysql-5.7.18/sql/binlog.cc 大约在3310行开始:MAX_LOG_…

如何优雅的当海王……

1 这车怪有个性的▼2 这个胡律师要火啊▼3 被拦下的教师节礼物……▼4 老公”偷情“的证据▼5 这船快得很,沉得快▼6 别耽误孩子,让孩子去跑马拉松吧▼7 这是要电脑养蛊?▼你点的每个赞,我都认真当成了喜欢

Linux Command Line 解析

处理模型 Linux kernel 的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line 进行配置的。在进行后续分析之前,先来理解一下command line 的处理模型: 要处理的对象是一个字符串,其中包含了各种配置信息&am…

COSCon'21 参会指南 你想要的这里都有

“ 点击蓝字 / 关注我们 ”| 作者:袁睿斌| 编辑:Corrie| 设计:宋传琪开源社寄语2021年的10月,第六届中国开源年会(COSCon21)再一次如期召开了。今年的开源寄语,我们能够想到是三个关键词&#x…

为什么说减速带是脑残的设计?

全世界只有3.14 % 的人关注了爆炸吧知识开车的谁没有压过减速带啊,当你以较高车速通过它时,剧烈振动会带给你强烈的刺激,有时候胃都感觉不舒服,加强你的不安全疑虑,促使你减速行驶。简单来说,就是“顶你起来…

C++语言基本概念(5)

面向对象编程与面向过程的一个根本区别,就是面向对象编程在虚拟的计算机世界构造出了形形的对象,很显然这些对象之间必然要发生关系,如何区别描述这些关系也是面向对象这门课所要研究的问题。我们都知道其中有非常多的概念,有些概…

创建工程师文化的3个步骤 | IDCF

原文地址:https://dzone.com/articles/3-steps-to-create-an-engineering-culture作者博文地址:https://start2grow.net/?screateagreatengineeringculture作者:Linda Bovaird译者:冬哥在之前的文章(https://start2gr…

UIButton的竖排图片和文本

UIButton的竖排图片和文本UIButton的竖排图片和文本第一想法:实现思路第二种方法UIContentHorizontalAlignment/UIControlContentVerticalAlignment完整代码片段:参考资料:更新UIButton的竖排图片和文本UIButton的竖排的话,如果不知道方法,就会走很多弯路了第一想法:实现思路橙…

他是绝世天才,却只开了半辈子的挂!死后惨遭封号200年,这就是和牛顿抬杠的下场.........

全世界只有3.14 % 的人关注了爆炸吧知识既生胡何生顿1703年3月3日,68岁的“英国达芬奇”躺在病床上,奄奄一息。临终前,他仍在惦记一个事儿:他希望,当年砸牛顿头上的,是个榴莲。因为是牛顿,让终身…

使用LightBDD轻松实现行为驱动开发

前言上次,我们介绍了行为驱动开发(BDD)它的优点是可以使用纯文本编写测试用例,不需要编程经验。如果测试用例也全部是程序员写的情况,这种方式反而存在障碍,feature使用与编写代码的语言完全不同的语言来编…

Android百度地图开发01之初体验

做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一、申请AK(API Key) 要…

会按摩的充气颈枕,只占行李箱一个角,却能让你的脖子爽到爆

▲ 点击查看出差、旅游、探亲,舟车劳顿的路上,想要休息实在太难。临近国庆,有多少人准备外出旅游、回家或者出差的?然而在舟车劳顿的路上,想要休息一下,不要太难。睡到一半撞到车窗痛醒,不小心歪…

Envoy实现.NET架构的网关(一)静态配置与文件动态配置

什么是Gateway在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题如果没有 API 网关模式,客户端应用将与内部微服务相耦合。在客户端应用中,单个页面/屏幕可能需要多次调用多个服务。 如果没…

corosync和pacemaker实现httpd和mysql双集群

一、环境介绍:三台均为双网卡:openstack-control.example.com openstack-control eth0:172.16.171.100eth1:10.1.1.100 openstack-nova.example.com openstack-novaeth0:172.16.171.110eth1:10.1.1.110openstack-neutron.example.com openstack-neutrone…

25岁男生要有多少存款才能让女友满意?

1 男女观念差异这么大的吗?▼2 演绎人生从落魄到适应再到悠哉的三个阶段▼3 牌子大,了不起咯~▼4 这鬼才文案用在这里屈才了▼5 狗子:你就说,我演的哪里不像?▼6 7个月一点没变我觉得已经蛮厉害得了▼7 不小心跟…

心得9--jsp设计模版

1.常用的面向对象设计模式有4种: Factory模式、Singleton模式、Facade模式和MVC架构模式。 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSPJavaBean模式,一种是ServletJSPJavaBean(MVC)模式。 JSP设计模…