我在两个不同的独立系统上工作,我们将代码存储在BitBucket(Git)上。两种不同的系统位于BitBucket上的两个不同的存储库中。让我们仅将它们称为“ system1”和“ system2”。每个存储库都遵循GitFlow的master / develop / release分支方案。
我们还有一个单独的存储库,其中存储有一个共享库,供“ system1”和“ system2”使用。还有另一个存储库,其中包含“ system1”和“ system2”也使用的所有与网络相关的软件。
“ system1”和“ system2”存储库每个都有一个构建脚本。构建脚本期望每个存储库都在同一目录级别上克隆。因此,例如:
~/system1
~/system2
~/shared_library
~/networking
构建脚本使用git describe
标记每个构建。它使用每个存储库中git describe
的输出来创建构建。因此,作为一个示例,system1
中的构建信息如下所示:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1
所有这些软件都已捆绑并使用SYSTEM1标签安装到目标计算机上。
我遇到的问题是如果networking
中有更改,那么这不会反映在system1
的内部版本号中。例如,假设对networking
进行了一次提交。现在运行构建脚本如下:
SYSTEM1: 10.1.1
SHARED_LIBRARY: 10.1.1
NETWORKING: 10.1.1-1
安装后,它看起来仍然类似于10.1.1版(因为网络已更改)。
从本质上讲,我需要更改方案,以便将某些其他存储库中的更改反映到git describe
中的system1
输出中。
我不确定如何做到这一点。
答案 0 :(得分:1)
首先,进行构建时测试以检查版本更新,如果依赖项(网络)版本已更新但依赖项(system1)未更新,则该测试会失败吗?然后,您至少可以自动检测并手动解析过时的从属版本。在您的网络增加但system1没有增加的示例中,以这种状态构建system1时,测试将失败,因此构建也会失败。根据您的需求,实施测试可能就像检查任何依赖项中是否存在任何-<commits>
(例如-1
)后缀一样简单。或与检查工件库中是否有最新构建的工件版本一样复杂。确切的逻辑完全取决于您的环境。
然后作为可选的下一步,您可以移动以完全自动进行版本的增量。不用在BitBucket中手动标记,而是让构建系统(甚至只是手动启动但自动升级的脚本)递增版本,而不是手动设置它们。这种自动化解决方案可以完成诸如将版本增量从依赖关系(网络)自动级联为依赖关系(系统1)之类的事情。您可能会使用同一类型的系统来自动进行标记,例如成功构建。我已经看到这种方法的某些部分已成功使用。
也许还有一个解决方案可以更多地利用git,但是在构建系统中自动执行某些版本检查或增量操作的一件好事是,它可能使您的管道减少对实现技术选择的依赖(例如git, npm,特定语言等)。