我们有一个由多个组件组成的分布式子系统,每个组件都在其自己的RPM包中部署到各种不同的RHEL / CentOS环境中。例如,可能会调用组件:
它们的部署如下:
我们定期发布系统版本和维护版本。因此,最初的几个系统版本可能如下所示:
因此,在每个系统版本中,并非所有包都会更新。目前,我们在YUM repo上使用未在发行版之间更新的包的符号链接:
每个版本目录(SR1,SR2,SR3,...)都是YUM存储库。我们还使用符号链接链接到以下滚动存储库:
这一切都在YUM repo服务器上进行管理,使用一些自行开发的脚本从Jenkins中提取包并将它们放入JL测试仓库(替换那里的任何旧版本)。当SR3测试完成并且它被提升为稳定时,我们按如下方式对符号链接进行抖动:
每个生产环境都为JL-old-stable.repo和JL-stable.repo安装了yum .repo文件。测试环境还有一个JL-testing.repo文件。然后在每个环境中使用yum upgrade 'JL_*'
以使其保持最新。工作正常,但有一些问题,主要是:
yum --disablerepo='JL-*' --enablerepo='JL-old-stable' downgrade 'JL-*'
这样的东西。yum --disablerepo='JL-*' --enablerepo='JL-SR1' downgrade 'JL-*'
之外,没有办法轻松地从SR3(稳定)回滚到SR1。有没有更好的办法?
我会改为使用一个不提供文件的RPM,而是使用精确版本控制的Requires
各种其他软件包。每个配置RPM的“版本”只是版本号。
OurConfig_SR_1.noarch
要求:
OurConfig_SR_2.noarch
要求:
然后你就可以将它们全部放在一个回购中,然后将versionlock放在机器上的OurConfig
上,直到你准备移动它为止。使用rpm -qi OurConfig
快速检查可以告诉您系统期望的内容。要求确切的版本应该阻止SR1系统自动将JL_batman
升级到2.0(我当然没有测试过这个!)。