我的公司使用Major.Minor.Patch.Build作为版本号。启动新版本时,将设置Major.Minor.Patch部件。然后,当工作完成时,构建数就会上升,直到一个构建被认为足够好为止。当这种情况发生时,Major.Minor.Patch.Build就会被发布到测试中。如果它通过了测试,那么我就继续刺激它。如果测试失败,那么它将返回到开发阶段,下一次尝试将修补程序号增加1 (只有在发布处于过程的Dev部分时才会出现新的版本号和构建)。这一切对我的公司来说都很棒。
但现在我们正试图转移到集装箱,赫尔姆海图和库伯奈特。这个生态系统似乎真的很喜欢SemVer V2。当我试图解决这种情况时,我看到了两个选项,可以将构建号输入到SemVer V2中:
1.3.2-build.21
。这是可行的,但它被认为是一个“预发布版”构建。因此,如果我只是将它作为一个正常的构建,那么版本优先级将始终倾向于1.3.2
而不是1.3.2-build.589
。这看起来很难看(而且容易出错)。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构建的版本号从发布前的版本号更改为发行版版本号,需要下列之一:
(我在医学领域工作,那里的错误很严重,所以我们有一些严格的测试规则。)
现在我要用一种“假装”的方法。在表面上,我们仍然使用Major.Minor.Patch.Build。但是结合我的CI/CD工具,我试图伪造它们。我给他们一个容器映像,它被标记为部署到Dev的预发布。我在部署时动态地构建我的舵图。
当我部署到Test时,我在容器映像中添加另一个标记(发布版本号)。我再次为部署创建一个动态创建的Helm图表(这次使用发布版本号)。我重复生产部署的动态舵图。
动态舵图,在部署过程中飞行重放.感觉有点不舒服。但在SemVer V2中,我看不出有什么办法可以绕过这种以消费者为中心的限制。
但我想,也许我不是唯一一个有这个问题的人。也许有人已经有解决办法了。所以我想我应该问:
发布于 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
版本之后就可以这样做了。
发布于 2021-05-22 14:41:29
为了使其与SemVer兼容,您的工作流需要进行一些更改:
<major>.<minor>.<patch>-build.0
开始(如果您是更积极的人,则使用...1
)。<major>.<minor>.<patch>-build.<n>
是“有福的”,并且没有1提升到版本<major>.<minor>.<patch>
的任何重要更改。这样,所有版本,无论是内部版本还是发布版本,都保留了SemVer排序。用户和/或客户不会看到任何包含内部版本号的版本,而且您的团队将知道没有内置号的版本就是发布的版本。而且您的团队将知道哪些补丁没有通过测试,因为在您的系统中没有没有生成号的补丁版本。
您表示不喜欢预发布版本,但在我看来,这些构建就是这样的。也许我误解了什么,所以可以在评论中详细说明一下。
1如果构建伪制品必须包含完整的版本号,则运行一个最终构建,该构建不包括构建人工制品中版本号的预发布部分,但否则应该是相同的。
发布于 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等等。
https://softwareengineering.stackexchange.com/questions/426632
复制相似问题