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 系统时要考虑的要点。

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