CI/CD 比较:使用托管提供商与自行托管

简介

持续集成、交付和部署是旨在帮助团队快速生产更可靠软件的实践的集合。虽然CI/CD主要是一套原则和方法,但工具在使这一理念成为一种实际选择方面发挥着重要作用。

CI/CD系统通过自动构建或打包每次提交到共享存储库,帮助团队更频繁地将新更改集成或合并到软件中。他们针对每个新版本运行测试套件,并在测试通过时自动将其升级到更具选择性的环境。遍历整个管道的构建版本可以自动部署到实时生产系统或排队等待手动部署。由于其广泛的责任,CI/CD系统通常涉及很大一部分内部环境和基础设施。

选择正确的CI/CD系统可以是difficult,,但通常选项分为两类:通过提供商访问的托管CI/CD服务,以及您可以自行设置和管理的自托管服务。在本指南中,我们将讨论这两个主要的软件组在不同类别中的不同之处,并提到一些混合的方法,这些方法试图提供一个很好的中间立场。最适合这项工作的软件将高度依赖于您组织的需求以及您团队的能力和优先级。

管理基础设施

使用托管CI/CD服务与运行您自己的自托管服务之间的主要区别之一是基础设施管理。CI/CD系统需要资源才能运行,与任何基础设施一样,这意味着必须有人维护服务和底层主机系统的运行状况。您组织的时间、金钱和价值通常将决定哪种解决方案最符合您在这一类别中的目标。

托管CI/CD服务

托管服务完全由提供CI/CD功能的外部组织托管和监督。外部组织负责运行和扩展其服务,维护其服务器群的运行状况,并以安全且易于使用的方式提供对服务的访问。这通常是托管CI/CD服务提供的最大价值,实际上,它可以通过封装和抽象复杂性来减轻团队的大量工作负担。

虽然托管解决方案委派了一部分工作,并允许您的团队专注于其他问题,但在某些领域,将对基础结构的控制外部化可能不是一个好主意。如果合规性或您自己的组织标准要求严格控制您的流程、严格控制对您的代码或数据的访问,或者包括外部合作伙伴无法保证的特殊要求,管理您自己的服务可能是您唯一的选择。

自托管CI/CD服务

如果您自行托管您的CI/CD系统,您将负责制定基础架构决策,通过维护硬件和修补软件来保持底层服务器的健康,并确保服务可用、安全和充分执行。这是一个很大范围的额外责任,可能超出了您的团队的专业知识,超出了您能够预算时间的范围。

由于CI/CD系统具有广泛的安全访问权限,并且对于建立对您推动项目的更改的信任至关重要,因此您的团队必须将其视为关键组件,而不是补充组件。连续系统的停机时间可能会影响整个团队的工作效率和能力。虽然CI/CD系统不是您的主要项目,而是一个帮助您的组织的工具,但管理它的责任不应掉以轻心。

安全与信任

使用托管提供者和自托管您自己的持续集成、交付和部署服务之间的另一个主要区别是安全性和信任之间的相互作用。 您的CI/CD系统将可以访问您的代码库,并能够部署到多个环境。 这意味着您需要重点关注CI/CD系统的安全性。 对于托管解决方案,您还需要评估您对外部提供商的信任。

托管CI/CD服务

在许多方面,托管CI/CD服务使大多数组织的安全性更加轻松。如果您没有任何特殊的法规要求,大多数提供商提供强大的安全性,通过加密通道访问您的代码库,在隔离的环境中运行您的测试,等等。由于您的提供商只关心CI/CD,他们通常会专注于充分锁定服务,以防范未经授权的访问和敏感信息意外泄露等威胁。他们的安全足迹是明确定义的,并在他们的熟练领域内。

另一方面,在使用托管解决方案时,您组织的安全性很大程度上取决于您对CI/CD提供商的能力和诚信的信任。您将责任交给外部人员,这减轻了您团队的负担,但也放弃了一定程度的责任和控制。例如,一些缺点包括无法实施您的提供商不支持的任何安全机制,依赖您的提供商快速修补高风险的安全漏洞,以及需要相信您的提供商对他们收到的事件和安全报告是诚实的。

自托管CI/CD服务

自托管CI/CD服务有一组不同的安全挑战。 整个系统的安全现在是你自己的责任。 这意味着您的团队必须为您的服务和部署配置安全、隔离的环境,快速响应CI/CD中涉及的所有技术的零日披露,实施强大的访问控制机制,并了解系统安全足迹的完整范围。 这可能是一项非常耗时和困难的工作,可能需要一个全职的管理或安全团队来妥善管理。 如果您还没有专门负责基础架构其他部分的这些任务的团队,那么随着项目的增长,可能很难进行管理。

然而,管理您自己的服务意味着您还可以在一定程度上灵活地控制您的安全流程和工具,这在其他情况下是不可能的。您的团队可以快速响应威胁,而不是等待其他人解决问题。您的CI/CD基础设施可以在您自己的基础设施中安全地部署在多层保护之下。如果您自行托管代码库,则可以进一步最小化任何潜在威胁可以针对的外围应用。无需走出您自己的专用网络和安全边界即可与这种关键工具进行交互,这有助于将安全漏洞的可能性降至最低。

集成

由于CI/CD系统是不同环境和许多其他软件的协调点,因此重要的是要考虑不同的解决方案与您正在使用的其他工具或系统集成的容易程度。每个持续集成系统都有一组不同的本地支持的项目。一些系统是用插件框架构建的,允许用户创建或使用扩展来增强平台的功能或互操作性。在选择CI/CD系统时,这些都是需要考虑的要点。

托管CI/CD服务

一般而言,托管CI/CD解决方案通常提供一组有重点的提供商,它们保证这些提供商的兼容性和支持。这些一流的系统通常是流行的、知名的存储库提供商和开发人员工具,它们是可靠和可预测的。由于集成的范围相对有限,负责维护它们的团队通常能够开发紧密的集成并快速响应任何依赖项更改,以确保系统中的功能不会受到破坏性更改的影响。

这种与流行服务的可靠紧密集成在满足您的项目需求时工作得非常好。它可以节省您的组织调试兼容性问题的时间和精力,密切跟踪依赖项更新,并在非本机通信的系统之间进行转换。但是,如果您的依赖项或软件要求不在托管提供程序支持的范围内,通常您几乎无法解决该问题。您对其他工具的选择可能会受到您的CI/CD提供商决定支持的项目的限制。

自托管CI/CD服务

自托管服务通常具有更多样的项目场景,它们可能会与之交互。由于大多数自托管解决方案都是开源的,因此用户和组织通常会影响添加到系统中的支持。虽然不只是自托管服务的一个功能,但大量项目都有插件系统,具有广泛的集成库,有助于支持许多不同的项目和用例。当社区能够积极地为产品和相关组件的开发做出贡献时,找到集成的机会就会高得多。

社区参与的不利之处是,集成的质量可能会有很大差异。与流行服务的集成可能会得到很好的维护并保持良好的工作状态,但对于超出该范围的任何集成,可能需要进行密集测试以确定集成的正确性和可用性。这些不太受欢迎的集成可能会停滞不前,很容易在更改相关项目时中断,或者如果它们没有定期更新以跟踪CI/CD系统的当前版本。此外,对于社区提供的插件,除了提交问题跟踪器报告或通过社区论坛或IRC渠道获得非正式的点对点帮助外,可能很难获得支持。对于关键集成,您的团队可能需要负责在内部支持和维护组件。

费用

最后,托管CI/CD提供商和自托管您自己的服务之间最大的区别之一是价格。由于提供的额外价值,托管服务的前期成本几乎总是更高,但这可能会以不同的方式实现,具体取决于您项目的规模和要求以及您选择的解决方案。您将必须分析您当前和未来的需求,以确定哪些成本对于您的项目来说可能会变得难以为继。

托管CI/CD服务

从基本数字来看,托管CI/CD服务的成本几乎总是高于自我管理的成本。对于托管提供商,您将雇佣外部组织来为您处理一部分CI/CD工作,因此您可以预期为您要卸载的工作付费。不过,成本可能会有很大差异。定价模型将因服务而异,公司根据用户数量、并发作业数量、专用计算资源的类型和规模、项目数量、每月构建分钟数和并行度等因素进行收费。

通常,托管提供商一开始相当便宜,但随着您的组织向外扩展,成本可能会迅速上升。随着项目的成熟,您可能会突然发现自己不得不使用不符合预算的额外服务级别。在考虑供应商时,重要的是要考虑到现在的成本,并在不同的情况下预测它们未来可能是什么。此外,注意供应商的价格稳定性,以最大限度地减少价格变化扰乱您的计划的可能性。彻底分析后,了解您正在使用的服务的定价结构并按比例进行预算,可以帮助您预测总运营成本,这比自托管服务时要容易得多。

自托管CI/CD服务

自托管的CI/CD系统通常乍一看是更便宜的选择,但可能有一些隐藏的成本,应该进行评估。 自托管选项需要计算资源来运行,因此最初,最大的成本是采购将运行连续系统的基础设施。 随着基础设施即服务云计算平台的普及,这已经成为一种具有成本效益的选择。 自托管CI/CD往往比托管服务的成本更线性地扩展,因为可以随着需求的变化为可预测的成本调配和配置额外的基础设施。

然而,基础设施的价格只是运营您自己的CI/CD服务的运营成本的一个组成部分。通过选择运行您自己的系统,您的团队承担了大量的额外工作和责任。当您向外扩展时,负责管理测试和部署的内部团队可能需要发展和开发更复杂的流程。这既有雇佣和培训内部员工的直接成本,也有让这些员工专注于管理您的CI/CD系统而不是致力于产品功能或其他工作所产生的间接机会成本。总体而言,自托管服务在基础设施方面的理由通常要简单得多,但在总运营成本方面则更难。

有中间立场吗?

我们已经提到了托管和自托管CI/CD服务之间的一些区别,但也有一些混合方法可能更适合某些组织。一些托管提供商提供内部版本的服务,作为其基于Web的软件即服务产品的替代方案。如果您的组织具有难以与外部提供商对接的要求,这可以帮助弥合自我托管和外部管理之间的差距。

例如,如果您的安全要求要求您的代码不能离开您的内部网络,则可以考虑在本地部署付费或企业CI/CD解决方案。这可以提供对网络和用于系统的基础设施的控制,而不会牺牲外部合同可能能够保证的支持和责任。内部付费CI/CD可以帮助解决使用托管服务的一些潜在挑战,但它不是一个完美的解决方案。虽然这可能有助于解决一些合规性、安全性和信任问题,但成本可能非常高,并且可能需要您自己的员工承担一些管理责任。混合解决方案既有其他两种解决方案的一些优点,也有其他两类的缺点。

总结

托管CI/CD提供商和自托管解决方案都可以帮助您改进开发和发布实践,从而更有信心地提供更可靠的产品。我们已经讨论了这两个主要选项之间最重要的区别,一些可能影响您的决定的因素,以及每个选择都必须克服的潜在挑战。我们还简要讨论了试图跨越自托管解决方案和托管解决方案之间界限的产品。最后,您组织的独特要求、预算和管理带宽将帮助您决定哪个选项提供正确的折衷。

Published At
Categories with 技术
Tagged with
comments powered by Disqus