精彩的DevOps生活

在弗兰克·卡普拉1947年的电影《美好生活》中,乔治·贝利在绝望的深渊中希望自己从未出生。于是一位天使向他展示了那个世界本来的样子。
我有时也觉得需要一个天使。
当然,不是出于同样的原因。我们的企业客户喜欢Artifactory帮助他们的方式DevOps容器管道平稳运行,从代码到集群.然而我经常在容器中找到因为Kubernetes编排Docker映像,Artifactory的主要价值被视为其服务能力,这是一种误解作为Docker注册表。这很重要,但它提供了更多。
Artifactory为开发人员带来了选择语言和框架的自由,以及对构建的信心。它为如何将各种包管理器和框架集成到企业DevOps流程中提供了一个合理的策略。
在选择DevOps设置时,你可能会有一些基本的顾虑:
- 开发人员能够创建确定的、可靠的构建吗?
- 有多少我得刮牦牛毛(不会增加价值的一次性任务)?
- 我的构建中隐藏了什么依赖关系(膨胀和/或风险)?
幸运的是,Artifactory解决了所有这些问题:
- 将所有依赖项从公共存储库缓存并存档到本地存储库,以实现快速、可复制的构建。其中包括操作系统、语言、框架、容器和配置构件。
- 与大多数包管理器集成,便于设置和维护。与最流行的CI服务器集成,以实现最小化监督的自动化。
- 提供对Docker映像的可见性,因此您随时都可以确切地知道其中有什么。

游览Pottersville
人造技术使这些事情变得如此自然,以至于人们很容易认为它们是理所当然的。也许理解这些好处的最好方法是考虑如果没有Artifactory,您将如何完成相同的事情。
如果Artifactory从未诞生,你的容器DevOps管道会是什么样子?
选项1:始终从远程存储库构建
如果没有Artifactory对远程依赖项的本地缓存,您可以选择在每次构建应用程序时直接从远程资源构建它们。
在这种情况下,您总是会将最新版本的依赖项合并到构建中。但是您永远无法完全控制构建中的内容,无法确定所包含的版本是否安全或与应用程序的其他部分兼容。由于远程源代码中的代码可以随时频繁更改,因此您不太可能从相同的构建过程中重新生成相同的映像。
出于同样的原因,您将不知道在构建中可能会引入哪些其他代码——它是必需的还是安全的。如果您直接从远程资源构建所有内容,那么您的构建更有可能崩溃。
依赖远程公共存储库进行构建还会带来在网络上流量负载很重时降低CI进程的风险。更糟糕的是,在您需要生成关键补丁的时候,远程公共存储库出现故障可能会对业务造成灾难性的影响。

选项2:从现有的Docker映像构建
如果没有Artifactory的存储库管理功能,您可能会选择一个Docker映像码头工人中心这与您需要的语言框架版本和操作系统发行版相匹配,并将其包含在最终的映像构建中。
这个场景将帮助您创建可复制的构建,但只能与您的docker映像版本相同。您将需要对您在没有任何工具帮助的情况下投入生产的内容负责。
如果没有Artifactory,您很可能很少或根本看不到所选择的docker映像实际包含什么。弄清楚这一点可能是一个繁琐的过程。
映像可能包含恶意组件或未使用的组件。Docker构建阶段本身就有可能出现破坏、延迟和意外膨胀,从而减缓发布过程。生成的最终映像可能不符合操作策略。

选项3:在本地构造基本映像
没有Artifactory的存储库管理特性,开发人员可以在本地工作站上构造一个基本映像,并将其推送到Docker注册表。然后,CI流程可以将该基本映像与其应用程序结合起来,以构建最终的容器映像。
这种创建维护的“黄金基础映像”的方法是创建可部署应用程序容器的常用实践,在短期内可以很容易地复制这些容器。在此场景中,开发人员的工作站(构建黄金基础映像的地方)有效地充当远程依赖项的本地缓存。
此过程需要仔细构造,并且能够独立于CI过程执行基本映像构建。如果您不需要经常更改基本图像,并且满足于固定到给定的堆栈版本,那么它的工作效果最好。它还希望开发人员把时间花在构建图像上,而不是编码。
在实践中,这个看似简单的解决方案可能会产生一系列破坏构建自动化的问题,并迫使您介入解决这些问题。从本质上讲,这些发布块很可能需要您在最不合适的时候进行干预——比如添加一个关键的修复。
例如,您可能需要一个新的基本映像来前滚某些操作系统包并获得一个新的框架补丁。当你用新的片段创建一个新的基本映像并上传到Docker时,所有自动化的CI运行都必须暂停。由于Docker和源代码中的更改被注册在不同的更改日志中,您必须根据新的Docker基本映像测试新的更改。如果您必须重新构建,即使使用相同的源代码,也会得到不同的结果,从而放弃确定性构建。

选项4:托管单独的本地工件存储库
如果没有Artifactory的远程依赖项的本地缓存(如npm、maven或PHP编写器包),您可以选择在单独的服务器上创建和管理自己的。
如果您选择这样做,您将获得Artifactory提供的一个关键好处,即始终使用您的依赖项的已知版本进行构建。您可以连续执行两个构建,并生成相同的Docker映像。
然而,这种解决方案的灵活性取决于你的聪明和细心。您将完全负责该基础设施,何时以及如何更新本地缓存,以及是否能够在需要时回滚这些更新,并保持存档的修剪。
您的实现也不太可能是企业级的,能够在高可用性下可靠地使用来自多个供应商的工具。您采用的每一项新技术都需要额外的工作、资源和管理,甚至需要一个全新的系统来适应它。2022世界杯阿根廷预选赛赛程你收养了一群毛茸茸又黏人的牦牛。
你也不太可能拥有构建的跨系统可追溯性,从而让你知道Docker映像是如何构建的。如果尽管你尽了最大的努力,但不想要的东西还是溜进了你的构建,你永远不会知道。你腹胀的风险虽然较低,但仍然存在。

回到贝德福德瀑布
“很奇怪,是不是?”影片中,天使克拉伦斯对乔治说。“每个人的生命都会影响到很多人的生命。当他不在身边的时候,他会留下一个可怕的洞,不是吗?”
这也是对Artifactory在DevOps过程中的合理描述。上面的示例显示了Artifactory帮助解决的自动化CI过程中有多少相互依赖关系。
Artifactory可以帮助您在准备应用程序投入生产时,将Docker映像视为临时打包。一旦它们准备好部署,Artifactory可以帮助您的自动化CI流程最大限度地减少需要重建Docker映像的次数,以确保它们的稳定性。
你的脑海中是否响起了一种认识的铃声?那也许是天使长出了翅膀。
要了解更多关于Artifactory如何让您的DevOps生活更精彩的信息,请阅读使用二进制存储库管理器的10个理由.
