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

我pipe理许多跨多个环境(dev,qa,staging和production)的服务器。 为了帮助pipe理这些,我们在本地web服务器上为我们的应用程序提供了多个存储(例如app_1_el6,app_2_el7等)。 我们还镜像了几个上游回购提供了我们的自定义rpms(如EL回购[1],EPEL [2]等)的依赖关系,以减less软件包的下载时间。

目前,一个cron作业同步我们的本地和上游存储库。 不时,我们会提出一个更新,导致一个问题(例如与我们的软件包不兼容)。 这最终导致了很多的痛苦,我想避免。

我最喜欢做的是为上游回购的本地镜像创build某种版本控制。 例如,我想确保,如果在上游的repo中引入了新的软件包,这会破坏我们的自定义RPM,那么我有办法回滚或以某种方式隔离该软件包。 最好的办法是什么呢?

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

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

迈克尔·汉普顿引用了一个名字为Katello和Spacewalk的答案, Satellite是RedHat提供的产品。

卡特洛是卫星是什么Fedora的是RedHat(据此)

生命周期环境和内容视图是您在Katello中寻找的内容:

提升内容视图

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

内容视图示例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

为了扩大fuero的答案,我们使用RedHat Satellite来实现这一点。 卫星是开源工具Foreman和Katello的组合 。 具体来说,Katello方面就是提供这种“生命周期pipe理”的东西。

在Katello中,您可以定义上游存储库以同步:yum repos,puppet伪造,git服务器等。然后将内容同步到库中,并通过各种环境“促销”它。 一个常见的例子是“库 – >开发 – >testing – >生产”。

前段时间,在一个木偶会议上有一个很好的演讲,其中一些开发者演示了Katello / Foreman。 在YouTube上的链接 。

有一点需要注意:我们目前正试图解决Katello解决不了的二进制分发和跟踪问题。 我的意思是,我们有一套Puppet模块和相关的RPM /二进制文件,但Katello没有办法“快照”,导出到不同的系统。 Katello将会对这些事情保持静态的“观点”,但是没有办法确定这个观点是什么 – 我不能告诉客户他们有系统的“版本X”,也不能确认他们的观点我的使用和我的完全一样。 这一切都取决于他们同步的时间和回购当时的情况。

我们正在考虑像Nexus / Artifactory这样的工具来提供这个function,所以你可能也想看看这些。

那么你可以很容易地build立自己的系统来做到这一点。
已经有一个名为reposync的工具可以用来同步整个存储库。
现在唯一缺less的环节是你怎么不把你的磁盘空间与东西混杂。
使用brtfs对重复数据删除进行一点读取(例如,在主线内核中合并, 检查此项目 )/您可以使用任何其他具有重复数据删除的文件系统,如Lessfs /
从那里,你可以使用任何允许重复数据删除的文件系统来设置你的数据存储空间,然后使用你的cronjob来进行同步,但是这次为新的同步添加时间戳,所以可以说你可以很容易地得到这个结构:
2016年5月15日
2016年5月16日
2017年5月17日
制作 – > 2016-05-15(符号链接)
登台 – > 2016-05-17(符号链接)
现在,由于您已经对这些数据进行了重复数据删除,因此您不会空间不足。

当然,这加起来不得不维护自己的符号链接和什么不是,但嘿使用Katello你还是要点击左右的开销:)