我如何对镜像上游存储库进行版本控制?

我如何对镜像上游存储库进行版本控制?

我管理着许多跨多个环境(开发、质量保证、预发布和生产)的服务器。为了帮助管理这些服务器,我们在本地 Web 服务器上为我们的应用程序(例如 app_1_el6、app_2_el7 等)设置了多个存储库。我们还镜像了几个上游存储库,这些存储库为我们的自定义 rpm 提供依赖项(例如 EL Repo [1]、EPEL [2] 等),以减少软件包下载时间。

目前,cron 作业会将我们的本地存储库与上游存储库同步。有时,我们会引入导致问题的更新(例如与我们的某个软件包不兼容)。这最终会造成很多麻烦,而我希望避免这种情况。

我想做的是为上游存储库的本地镜像创建某种版本控制。例如,我想确保如果上游存储库中引入了新的软件包,而该软件包破坏了我们的自定义 rpm,那么我可以回滚或以某种方式隔离该软件包。最好的方法是什么?

[1]http://elrepo.org/tiki/tiki-index.php

[2]https://fedoraproject.org/wiki/EPEL

答案1

Michael Hampton 引用了一个答案,其中提到了 Katello 和太空行走卫星是 RedHat 为实现该目标而提供的产品。

卡特洛对于 Satellite 来说,Fedora 对于 RedHat 来说也是如此(根据

生命周期环境内容浏览量您在 Katello 中寻找的是什么:

推广内容观点

最初,内容视图以版本 1 发布到库中。如果其他环境中的内容主机想要使用此内容视图,则需要将内容视图的某个版本提升到这些环境中。例如,给定内容视图“新内容视图”,其版本 1 已提升到开发环境。任何连接到内容视图的开发环境中的内容主机都将保持为版本 1,直到版本 2 发布并提升到开发环境。

内容视图示例 http://www.katello.org/docs/2.3/user_guide/content_views/promote_content_view2.png

内容视图促进进度 http://www.katello.org/docs/2.3/user_guide/content_views/promote_content_view3.png

答案2

为了扩展 fuero 的答案,我们使用 RedHat Satellite 来实现这一点。Satellite 是开源工具的组合领班卡特洛。具体来说,Katello 方面提供了这种“生命周期管理”。

在 Katello 中,您可以定义要同步的上游存储库:yum repos、puppet forges、git 服务器等。然后,您可以将内容同步到库中,并通过各种环境“推广”它。一个常见示例是“库 -> 开发 -> 测试 -> 生产”。

不久前,在一次 Puppet 会议上,一些开发人员进行了一次精彩的演讲,演示了 Katello/Foreman。YouTube 链接

需要注意的一点是:我们目前正在尝试解决二进制分发和跟踪问题,而 Katello 无法解决这个问题。我的意思是,我们有一组 Puppet 模块和相关的 RPM/二进制文件,但 Katello 无法提供“快照”以将其导出到其他系统的方法。Katello 将保留这些内容的静态“视图”,但无法确认该视图中的内容 - 我无法告诉客户他们拥有系统的“X 版本”,也无法确认他们使用的视图与我的完全相同。这完全取决于他们何时同步以及当时存储库中的内容。

我们正在考虑使用 Nexus/Artifactory 等工具来提供此功能,因此您可能也想看看这些工具。

答案3

嗯,您可以轻松设置自己的系统来执行此操作。
已经有一个名为 reposync 的工具可用于同步整个存储库。
现在唯一缺少的环节是如何不让磁盘空间被东西弄得乱七八糟。
阅读一下关于使用 brtfs 进行数据重复数据删除的资料(例如,因为它已合并到主线内核中,检查该项目)/您可以使用任何其他具有数据重复数据删除功能的文件系统,例如 Lessfs/
从那里,您可以使用任何允许重复数据删除的文件系统设置您的数据存储空间,然后使用您的 cronjob 进行同步,但这次为新的同步加上时间戳,因此可以说您可以轻松得到这种结构:
2016-05-15
2016-05-16
2017-05-17
生产 -> 2016-05-15(符号链接)
暂存 -> 2016-05-17(符号链接)
现在,由于您已经对该数据进行了重复数据删除,因此您不会再缺少空间。

当然,这会增加你必须维护自己的符号链接等的开销,但是嘿,使用 Katello 你仍然需要点击 :)

相关内容