我们是一家小型公司,拥有多个团队管理自己的git存储库。这是一个Web平台,每个团队的工件都在一天结束时部署以进行夜间测试。我们正在尝试使围绕版本控制和打包的过程正式化。
每个团队都有一个主分支,负责日常开发。每个团队的质量保证成员都希望将他们团队变更中的工件部署到测试台中,由厨师将所有组件组合在一起。工件是压缩包,但我想将其转换为RPM,以便我们可以正确思考和推理版本。
发布过程涉及从每个git存储库的开发分支(在大多数情况下为master)切断发布分支。然后将其提供给质量保证,由质量保证对一组工件进行测试和签核。
例如,这是一个典型的git存储库及其相关的发行分支:
0-0-0-0-0-0-0-0-0-0 (master)
| |
0 0
(rel-1) |
0
(rel-2)
我一直在试图找出一种方案来执行来自开发分支的软件包的版本控制。我们不想过多地标记每个仓库的主分支,并限制标签仅释放分支。但是我们应该能够使用标准的yum / rpm语义查询测试机器中已部署的软件包。当master分支没有标签时,开发版本会是什么样?我知道这git describe
可以为我提供构建版本的有用表示,但是当标记分支上的各个发行点时,它可以很好地工作。
编辑1:响应@ Urban48的答案
我认为我应该多解释一下发布过程。为了便于讨论,我们假设master
在所有存储库中都有分支。该master
分支被视为开发分支,并且已部署到支持CI-CD的自动化QA环境。这是每晚测试的子集,用于确保主服务器的稳定性。在削减发行分支之前,我们先看一下这一系列工作。我们的发行分支是短暂的。假设(从稳定的主服务器上)剪切了一个发布分支之后,将运行完全回归,进行修复并将其部署到生产中。这大约需要一周的时间。我们几乎每两周发布一次产品。
我们的功能分支总是从母版中剪切下来的,并在与母版合并之前经过一定量的开发人员测试,然后对它们进行CI-CD稳定性检查。
修补程序是在修补程序分支(从发行版分支切下的)上进行的,并以最小的影响测试将其部署到生产环境中。
以下是我们针对发行版和修补程序分支的版本控制策略。在质量检查周期中,发行分支会经历的版本v2.0.0-rc1
,v2.0.0-rc2
最后在质量检查批准后变为v2.0.0
。
有时,我们会针对一些小功能进行点发布,这些小功能会合并到版本变为的版本分支(然后合并到母版)中v2.1.0
。修补程序采用该v2.1.1
模式。
但是,问题不在于对这些分支进行版本控制。我不希望完全更改此版本控制方案。唯一的变化来自开发部门。主。如何在CI-CD环境中可靠地指示在生产中的先前发行版中存在哪个版本。理想情况下,这可以通过智能git标记完成,但最好不要过度标记master分支。
rc
后缀之前是什么?那将决定major.minor
开发版本。rc
而构建号只能基于此获得。同样,rc
对master来说没有意义,因为我们从不释放master。我们今天在发行分支中将发行候选标记为发行周期的一部分
rc
后缀。