在云中构建管道

云计算的出现给软件的托管和交付方式带来了巨大变化。 在线服务在日常生活中颇为常见,对于零售业和计算基础架构都是如此。 在本文中,我们将探讨持续集成、交付和部署如何从云技术中获益,特别是基础架构即代码和容器。

无论您是刚开始设置 CI/CD 管道还是已有本地托管设置,都应了解如何使用这些技术和工具,使其适应您的需求。

作为限制因素的基础架构

持续集成和部署旨在使向用户发布软件的流程更快、更可靠。

将少量多次的方法与构建、环境创建和测试的自动化相结合,有助于缩短从开发到发布的时间,同时增强对产品质量的信心。

CI/CD 工作流的后期阶段通常包括端到端测试和性能测试以及手动测试,这些都需要与生产密切对应的测试环境。 为了最大限度地提高测试的效率和一致性,这些环境应自动刷新,而不是手动维护。 而付诸实践不仅需要 DevOps 技能和工具,还需要大量基础架构为 CI 服务器、构建代理、测试环境和数据存储提供计算能力。

支持构建流程所需的机器数量取决于项目的大小和复杂性以及参与项目的开发者的数量。 但是,这个数字也可能随时间变化。

如果要为 CI/CD 管道托管和管理您的所有基础架构,那么,在拥有足够容量以在需求高时同时运行多个作业,与购买和维护长时间闲置的机器的成本之间,您必须决定如何取得平衡。 这是云托管基础架构可以提供显著优势的地方。

云能为您的持续集成管道做什么?

云托管基础架构的出现给基础架构的管理方式带来了巨大变化。

使用基础架构即服务 (IaaS),可以通过虚拟机 (VM) 或容器提供计算资源。 如果您需要更多容量,只需要提出要求(当然也需要付费)- 采购、安装和管理以及物理硬件都不再是问题。

这样,组织看不到托管这些 VM 或容器的物理机(除了出于监管和灾难恢复目的对地理区域的了解之外),这已带来一种思想上的转变。

基础架构即代码

在云托管的背景下,庞大的物理资源作为服务的后盾,使得服务器能够被视为可互换且可弃置的商品,也就是“家畜”。 这与传统的裸机托管形成鲜明对比,在传统的裸机托管中,服务器长期被视为宠物。它们有合适的名字,生病时要被照顾,并被期望能够活得比较长久。

采用“家畜”方法,如果需要更新或修复服务器,只需将其移除,并替换为符合要求的新服务器。 无需花费时间或精力修改或修复现有实例。 相反,可以根据需要重新配置镜像并部署新实例。

在 IaaS 模式下,只需为使用的计算资源付费,因此采取“家畜”的思路是很合理的。 这就是基础架构即代码 (IaC) 的用武之地。 IaC 是一种 DevOps 做法,利用脚本使基础架构的配置可重复。

将所有配置详细信息放入代码,并像应用程序代码一样保存在源控制中,意味着您可以避免因对单个环境进行手动调整而产生的不一致。

就像开发中的软件一样,基础架构本身也可以通过 CI/CD 管道确保其按预期运作,这样的好处是可以轻松回滚更改。

编写基础架构可以打开更多自动化的大门;环境可以在需要时自动创建,并通过推出新配置更新。

IaaS 提供商有效地无限供应计算资源,使您可以根据需求扩大和缩小规模,同时确保在实例发生故障时可以立即替换。 这意味着您的 CI/CD 设置可以响应需求的增长,并保持可靠的服务。

外包硬件

借助 IaaS 和 CaaS,物理硬件的维护(包括网络和存储容量管理)以及数据中心物流都由云提供商处理,作为其服务的一部分。

这将使您的团队得以专注于优化管道流程和确保其安全。 由于成本是处理能力和时间的决定因素,因此应该尽可能并行执行任务,从而比在较长时间内使用较少机器更快地将结果提供给开发者。

容器

容器应用 IaC 原则,让您更有效地利用云托管基础架构。 容器将软件与所有需要运行的依赖项打包,让“嗯,它在我的机器上能用”这种心态成为历史,也结束了对配置详细信息差异的追查。 Docker 是最知名的容器技术之一,但也可以使用其他选项。

与虚拟机一样,容器允许多个应用程序在同一台物理服务器上运行,同时使它们彼此隔离。 但是,与 VM 不同,容器不包含操作系统,所以占用空间较小,并且不需要固定部分的主机资源。 因此,在一台机器上可以容纳的容器比 VM 多得多,使其成为将软件高效部署到云托管基础架构的理想选择。

采用容器意味着通过软件将环境依赖项和配置详细信息打包到一个工件,后续可部署到提供容器运行时的任何机器。

一个应用程序可能被分到多个容器中(如微服务架构),在这种情况下,容器需要部署到同一台机器或一个联网的机器集群中。 Kubernetes 等容器编排工具可通过自动执行部署、管理和扩缩等任务简化大量容器操作。

在 CI/CD 工作流中使用容器,可以更轻松地将最新构建部署到管道的不同阶段。 构建工件是一个容器镜像,可以在发布到生产之前统一部署到每个测试环境。

在云托管的 CI/CD 管道中,容器可以有效利用计算资源,并允许您使用自动化工具。 您可以在需求旺盛的时候增加容量,并在需求较低的时候,通过减少容器和释放底层基础架构来节省成本。

除了 IaaS,一些云提供商现在还提供容器即服务 (CaaS),允许组织直接部署容器,而无需管理编排平台和配置集群。

CI 云托管的考量因素

虽然在云中托管 CI/CD 管道可以在基础架构成本、可扩缩性和可靠性方面获得显著优势,但也有一些缺点需要考虑。

知识和技能

首先,使用 IaaS 和 CaaS 等云服务不可避免地涉及学习曲线。 如果您还不具备这些领域的专业知识,您的团队成员将需要时间提升技能,或者您需要考虑如何引入这些知识。 尽管如此,云技术使用经验仍是一项理想的技能,如果您的团队有机会发展这些技能并使用最新技术,那么对员工留任和招聘都有好处。

系统架构

如果正在开发的软件是为云而设计,在使用微服务、容器和其他云原生做法的基础上,使用容器在 CI/CD 云管道中自动化流程就变得相对简单。 不过,如果您使用的是整体架构,那么将软件打包到容器可能是一个挑战。

当然,容器并不是云托管管道的必要条件,您仍然可以在云提供商的基础架构上使用虚拟机运行构建,并为测试提供一致的预生产环境。 然而,VM 比容器消耗的资源更多,环境将需要单独配置。

成本

在云环境下,时间就是金钱,您肯定不希望为闲置的计算资源付费。 为了获得成本效益,必须高效使用云托管。 这意味着要利用工具监视使用情况,并在超时后释放空闲实例,或者自行实现这一逻辑。 后一种选择可能需要您的组织尚不具备的技能,因此这些选择值得进一步研究和权衡。

安全

在云中托管数据和服务时,安全问题始终备受关注。 对于一些公司来说,单是将关键软件置于第三方套件上的想法就无法通过。 即便如此,许多组织都选择使用公有云来托管实时服务和部署管道,从源控制仓库到 CI 服务器和测试环境。

了解潜在攻击途径,在管道中建立对应的保护措施来防止恶意行为者访问您的实时系统,以及围绕凭据管理、测试数据和访问控制实施最佳做法,这些都是缓解风险的关键。

混合方法

虽然基础架构即代码、容器和容器编排都源于云技术,但它们也能用于混合基础架构。

相同的工具既可以在私有云中使用,也可以在本地基础架构中使用,但要注意,管道的扩缩程度有限。 如果您的组织计划在未来过渡到云托管基础架构,那么尽早采用云原生工具将使您提前积累专业知识并让过渡更加简单。

基础架构即代码的云原生做法为本地基础架构上的持续集成和部署带来了多重优势。 首先,配置新环境的速度大幅提升,因为您只需要运行一个脚本。

编写环境创建还提供了一致性,因此您可以确保生产设置和预生产环境(无论是用于安全、性能或 UI 测试,还是用于支持和销售团队的沙盒)之间的均等。 将基础架构配置文件保存在源控制中,团队可以对引入的变化和引入时间进行审查跟踪,使环境问题的调试变得更加简单。

在某些情况下,组织选择将云资源用于其部署管道的特定阶段。 例如,负载和性能测试可能需要大量资源,在云中创建临时环境进行测试可能更具成本效益。 如果要采用这种方法,务必考虑将构建转移到不同基础架构所涉及的潜在复杂性和时间。

为什么为您的 CI 管道选择云托管?

虽然自动化的 CI/CD 流程在交付速度和质量保证方面具有显著优势,但在速度和吞吐量方面,可用的基础架构是一个限制因素。 将管道迁移到云中,您不再需要纠结是配置足够的服务器以应对高峰需求还是购买和管理不常用的机器。

云原生技术和做法不仅能够高效利用云托管基础架构,还增强了持续集成和部署技术。 相同的方法也可应用于本地基础架构,使软件的交付更快、更可靠。