首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在基于构建号的公司中处理SemVer

如何在基于构建号的公司中处理SemVer
EN

Software Engineering用户
提问于 2021-05-21 23:10:07
回答 3查看 1.5K关注 0票数 6

我的公司使用Major.Minor.Patch.Build作为版本号。启动新版本时,将设置Major.Minor.Patch部件。然后,当工作完成时,构建数就会上升,直到一个构建被认为足够好为止。当这种情况发生时,Major.Minor.Patch.Build就会被发布到测试中。如果它通过了测试,那么我就继续刺激它。如果测试失败,那么它将返回到开发阶段,下一次尝试将修补程序号增加1 (只有在发布处于过程的Dev部分时才会出现新的版本号和构建)。这一切对我的公司来说都很棒。

但现在我们正试图转移到集装箱,赫尔姆海图和库伯奈特。这个生态系统似乎真的很喜欢SemVer V2。当我试图解决这种情况时,我看到了两个选项,可以将构建号输入到SemVer V2中:

  1. 把它放进预发布标签里。有点像:1.3.2-build.21。这是可行的,但它被认为是一个“预发布版”构建。因此,如果我只是将它作为一个正常的构建,那么版本优先级将始终倾向于1.3.2而不是1.3.2-build.589。这看起来很难看(而且容易出错)。
  2. 放进元数据。有点像:1.3.2+build.21。这不再是预发布,但是对于版本优先级,1.3.2+build.21被认为与1.3.2+build.589相同。

我可以理解SemVer V2在这里试图做什么。从我的消费者的角度来看,版本号是额外的细节。(我的软件使用者永远不会看到两个不同的应用程序Major.Minor.Patch版本。)

但是,我的开发团队需要清楚地知道哪个构建是哪个。因此,仅仅使用Major.Minor.Patch是行不通的。

我们的CI/CD流水线工具实现了基于SemVer V2优先级的自动排序和拾取。所以元数据方法是行不通的。

我不喜欢使用预发布版来构建正常版本的想法。所以我已经把它从充分利用中消除了。

另一种选择是使用Major.Minor.Build。(将修补程序号替换为版本号。)虽然我可以这么做,但对我的公司来说,放弃贴片号码是很难的。(这似乎有点不对。)

我们的流程不允许我在发布到生产时更改版本号。要将经过测试和准备好的prod构建的版本号从发布前的版本号更改为发行版版本号,需要下列之一:

  1. 另一个构建(然后必须再次测试)
  2. 修改二进制文件(然后必须再次测试)

(我在医学领域工作,那里的错误很严重,所以我们有一些严格的测试规则。)

现在我要用一种“假装”的方法。在表面上,我们仍然使用Major.Minor.Patch.Build。但是结合我的CI/CD工具,我试图伪造它们。我给他们一个容器映像,它被标记为部署到Dev的预发布。我在部署时动态地构建我的舵图。

当我部署到Test时,我在容器映像中添加另一个标记(发布版本号)。我再次为部署创建一个动态创建的Helm图表(这次使用发布版本号)。我重复生产部署的动态舵图。

动态舵图,在部署过程中飞行重放.感觉有点不舒服。但在SemVer V2中,我看不出有什么办法可以绕过这种以消费者为中心的限制。

但我想,也许我不是唯一一个有这个问题的人。也许有人已经有解决办法了。所以我想我应该问:

如何能够处理CI/CD工具中的SemVer V2集成,但在开发和部署过程中仍然使用一个版本号?

EN

回答 3

Software Engineering用户

发布于 2021-05-22 15:10:58

我们要做的是major.minor.patch-build。所以1.3.2-589。我们认为这是一种相当普遍的方法。它还与rpms兼容,我们使用rpms来分发我们的一些软件。

因此,如果我只是将它作为一个正常的构建,那么版本优先级将始终倾向于1.3.2而不是1.3.2-build.589。这看起来很难看(而且容易出错)。

如果您从未创建过1.3.2,那么版本优先级是否优于1.3.2-589并不重要。如果您确实创建了一个1.3.2,只需确保在完成了所有-build版本之后就可以这样做了。

票数 4
EN

Software Engineering用户

发布于 2021-05-22 14:41:29

为了使其与SemVer兼容,您的工作流需要进行一些更改:

  • 当一个新的发行版启动时,您可以从<major>.<minor>.<patch>-build.0开始(如果您是更积极的人,则使用...1 )。
  • 开发/测试周期继续如常进行。
  • 当测试清除用于发布的构建时,相关的版本<major>.<minor>.<patch>-build.<n>是“有福的”,并且没有1提升到版本<major>.<minor>.<patch>的任何重要更改。

这样,所有版本,无论是内部版本还是发布版本,都保留了SemVer排序。用户和/或客户不会看到任何包含内部版本号的版本,而且您的团队将知道没有内置号的版本就是发布的版本。而且您的团队将知道哪些补丁没有通过测试,因为在您的系统中没有没有生成号的补丁版本。

您表示不喜欢预发布版本,但在我看来,这些构建就是这样的。也许我误解了什么,所以可以在评论中详细说明一下。

1如果构建伪制品必须包含完整的版本号,则运行一个最终构建,该构建不包括构建人工制品中版本号的预发布部分,但否则应该是相同的。

票数 2
EN

Software Engineering用户

发布于 2021-05-22 08:45:55

因此,在我看来,这里的关键问题是:“我们的CI/CD管道工具基于SemVer V2优先级进行自动排序和选择”。

显然,如果要进行一个补丁版本的多个构建,则您的CI/CD必须明白,版本号在某种程度上会影响优先级。

如果您可以将其更改为查看版本号,那么您可以将SemVer与内置号一起使用,即。1.2.3+4

如果你不能,那么你只需要更新补丁号码。

从CICD/SemVer的角度来看,我想问题在于,仅仅是一个版本号并不意味着构建是一个更高的版本。假设我的主分支为1.2.3.4,功能分支为1.2.3.999。我已经做了一吨的构建,但是这个特性还没有被合并,如果其他一些开发人员接下来构建他们的随机分支,他们将得到1.2.3.1000等等。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/426632

复制
相关文章
Ubuntu 17.04(Zesty Zapus)正式版发布
今天,2017 年 4 月 13 日,Canonical 官方发布了 Ubuntu 17.04(Zesty Zapus)的最终版。自从去年十月发布 Ubuntu 16.10(Yakkety Yak)起,它已经开发了将近 6 个月。
Debian中国
2018/12/20
7420
linux内核版本介绍_ubuntu内核版本查看
你可以在这里得到Ubuntu版本及它相应的内核的列表。4.10 Warty Warthog 2.6.8
全栈程序员站长
2022/09/23
3.5K0
在 Ubuntu Linux 上安装最新的 Erlang
Erlang 在 Ubuntu 的 Universe 仓库 中可用。启用该仓库后,你可以使用下面的命令轻松安装它:
用户8965210
2021/09/27
2.9K0
在 Windows 平板(Z3735F)上安装 Ubuntu
手里头有台六年前买的 Windows 平板——昂达 V891W。预装系统 Win8,采用当年有着英特尔补贴而被寨厂们钟爱的 Z3735F 芯片方案,以及勉强能用的 2G 内存和 32G 的 emmc——不过随着前两年升级几次 Win10 后,它的系统盘基本被系统更新占满,卡得没法再用了。
贤羽
2022/06/09
12.5K2
在 Windows 平板(Z3735F)上安装 Ubuntu
Ubuntu 16.04.2 安装Linux kernel 4.10 内核并解决 VMware 问题
Linux kernel 4.10 发布了,据说有很多提升,那么可以常鲜看看,Ubuntu 16.04.2 安装Linux kernel 4.10 内核方法如下:
用户8710643
2021/06/09
1K0
最新版 Harbor 在ubuntu系统上安装
The latest version of Harbor is installed on the ubuntu system
小陈运维
2021/10/13
5280
Ubuntu 17.04 桌面版安装指南超多截图
Ubuntu 17.04的正式发布是Linux桌面爱好者的好消息。 Ubuntu 17.04的代号是Zesty Zapus,因为它不是LTS版本,所以它的支持仅在未来9个月可用(2018年1月)。 Ubuntu 17.04中发现的一些变化如下所示:
知忆
2021/06/21
8970
在Ubuntu上安装Minikube
为了方便开发者体验Kubernetes,社区提供了可以在本地部署的Minikube。由于在国内网络环境内,无法顺利的安装使用Minikube,我们可以从阿里云的镜像地址来获取所需Docker镜像和配置。
mazhen
2023/11/24
9691
在Ubuntu上安装ReviewBoard
因为ReviewBoard在Windows上停止更新了,所以了解如何在Linux系统安装ReviewBoard是很有必要的。笔者只在Apache+MySQL+Ubuntu下实现过,其余均参考官方安装文档:http://www.reviewboard.org/docs/manual/dev/admin/installation/linux/。 [Note] 安装过程中如碰到报错问题,自行谷歌或者百度,大部分均可解决。有些是软件版本问题,比如之前用Ubuntu 12.04有个软件包用easy_install安装的版本一直低于安装ReviewBoard的要求,升级成Ubuntu 13.04之后就没问题了。
星哥玩云
2022/07/01
1.5K0
在 Ubuntu 上安装 MySQL
在 Ubuntu 中安装 Mysql 最方便方式是用 MySQL 自己的 APT 仓库。 APT 仓库中包含了 MySQL 的服务器和工具相关的软件。我们需要将此 MySQL APT 仓库添加到系统的包源列表中。
不惑
2023/09/23
1.2K0
在ubuntu上编译prometheus
prometheus的编译并不难,核心是要将编译环境配置到符合要求的地步,否则就会出现各种错误,而且难以排查。 我们主要需要关心go、npm和nodejs的版本。 以下步骤亲测有效。
方亮
2024/05/24
1450
在ubuntu上编译prometheus
RabbitMQ在Ubuntu上的环境搭建
环境配置 Ubuntu Server 18.04 RabbitMQ 3.6.10 安装之前 我们使用apt-get进行RabbitMQ安装,在安装之前,强烈建议您把apt源换位国内,大大增加下载安装的速度,点击查看:《Ubuntu apt-get和pip国内源更换》 安装rabbitmq-server sudo apt-get update sudo apt-get install rabbitmq-server 服务常用命令 启动rabbit服务:service rabbitmq-server star
磊哥
2018/07/04
1K0
Git在Ubuntu上的配置方法
  本文介绍在Linux操作系统的Ubuntu版本中,配置分布式开源版本控制系统Git,随后基于Git克隆GitHub中项目的代码的详细方法。
疯狂学习GIS
2024/07/31
2120
Git在Ubuntu上的配置方法
如何在Ubuntu 18.04上安装最新的MySQL
MySQL是一个着名的开源数据库管理系统,用于存储和检索各种流行应用程序的数据。MySQL是LAMP堆栈中的M,是一组常用的开源软件,也包括Linux,Apache Web服务器和PHP编程语言。
angel_郁
2018/10/16
2.3K0
「  简述一次无U盘安装Ubuntu系统在z8700寨板上的思路  」
寨板的usb和typec供电有问题,在安装linux类系统时会出问题,所以采用本地划分分区的方法引导安装Ubuntu
青益
2023/02/28
2.2K0
「  简述一次无U盘安装Ubuntu系统在z8700寨板上的思路  」
如何在Ubuntu 22.04上安装Linux 内核 6.0?
内核是任何基于 Linux 的操作系统的核心部分,它充当计算机系统软件和硬件之间的桥梁,还提供用户和应用程序与计算机交互所需的接口。内核提供了许多功能,包括进程调度、资源分配、设备管理、中断处理、内存管理和进程。
网络技术联盟站
2022/11/16
4.4K3
如何在Ubuntu 22.04上安装Linux 内核 6.0?
在Ubuntu上搭建Hadoop群集
前面我搭建的Hadoop都是单机伪分布式的,并不能真正感受到Hadoop的最大特点,分布式存储和分布式计算。所以我打算在虚拟机中同时开启3台机器,实现分布式的Hadoop群集。
深蓝studyzy
2022/06/16
6940
在Ubuntu上搭建Hadoop群集
在 Ubuntu 上安装Microsoft Edge[通俗易懂]
1.要安装Microsoft Edge,你首先需要在终端中运行这些命令,在设备上设置微软的存储库。
全栈程序员站长
2022/09/13
2.3K0
在Ubuntu 16.04上安装WordPress
在本指南中,您将学习如何在运行Ubuntu 16.04的Linode上安装WordPress。WordPress是一个流行的动态内容管理系统,专注于博客。WordPress可以部署在LAMP或LEMP堆栈上,并具有广泛的插件框架和主题系统,允许网站所有者和开发人员使用其简单但功能强大的发布工具。
Techeek
2018/09/17
5.2K0
在Ubuntu 16.04上安装WordPress
在Ubuntu 18.04上安装WordPress
WordPress是一个非常流行的专注于博客的动态内容管理系统(CMS)。WordPress可以部署在LAMP或LEMP堆栈上。它具有的可扩展插件框架和主题系统允许网站所有者使用其简单但功能强大的发布工具。
eru
2018/09/05
7.8K0
在Ubuntu 18.04上安装WordPress

相似问题

华硕USB-AC68 68 [0b05:1817]驱动?

30

Ubuntu 17.04 Z校Zapus中的持久性问题

10

在16.04安装Z校Zapus (17.04)更新版本的R

10

Ubuntu 16.04用4.10内核冻结

10

以某种方式在内核4.10 Ubuntu 16.04上结束

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文