概述
CI/CD 是持续集成和持续交付/部署的缩写,旨在简化并加快软件开发生命周期。
持续集成(CI)是指自动且频繁地将代码更改集成到共享源代码存储库中。持续交付和/或持续部署(CD)是一个由两部分组成的过程,涉及代码更改的集成、测试和交付。持续交付不会自动部署到生产环境,持续部署则会自动将更新发布到生产环境。
这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持,采用的方法不是 DevOps 就是站点可靠性工程(SRE)。
为什么 CI/CD 很重要?
CI/CD 可帮助企业组织避免错误和代码故障,同时保持软件开发和更新周期的持续。
随着应用规模的扩大,CI/CD 的功能有助于降低复杂性、提高效率并简化工作流。
CI/CD 可自动执行以前将新代码从提交到生产所需的人工干预,因此可最大限度地减少停机时间,并加快代码的发布速度。而且,由于能够更快地将更新和更改集成到代码中,因此,可以更加频繁、高效地采纳用户的反馈意见,从而为最终用户带来积极的效果,客户的整体满意度也会有所提高。
什么是持续集成?
CI/CD 中的“CI”始终指持续集成,这是一种面向开发人员的自动化流程,有助于更频繁地将代码更改合并回共享分支或“主干”。进行这些更新时,会触发测试步骤的自动执行,以确保合并代码更改的可靠性。
现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业组织安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。
这是因为当某个开发人员单独对应用进行更改时,可能会与其他开发人员同时进行的其他更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于云的 IDE 达成一致,那么就会让问题更加雪上加霜。CI 可被视为一种解决方案,用于解决同时开发的应用因分支过多而可能相互冲突的问题。
成功的 CI 意味着,一旦某个开发人员对应用的更改被合并,这些更改就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来进行验证,以确保相应更改不会破坏应用。这意味着要测试从类和函数到构成整个应用的不同模块的所有内容。CI 的优势之一在于,如果自动化测试发现新代码与现有代码之间存在冲突,它能够支持更轻松地快速且频繁地修复这些错误。
CI/CD 中的“CD”指的是什么?
CI/CD 中的“CD”指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。二者均与管道中的更多阶段的自动化相关,但有时会分开使用,以说明自动化的程度。选择持续交付还是持续部署取决于开发团队和运维团队的风险承受能力及具体需求。
什么是持续交付?
持续交付是指自动执行 CI 中的构建、单元测试和集成测试后,自动将经过验证的代码发布到存储库。因此,要实现有效的持续交付流程,将 CI 内置到开发管道中显得非常重要。
在持续交付中,从合并代码更改到交付生产就绪型版本,每个阶段均涉及测试的自动化及代码发布的自动化。整个流程结束后,运维团队便可以迅速将应用部署到生产环境。
持续交付通常意味着对开发人员对应用所做的更改自动进行错误测试并将其上传到存储库(如 GitHub 或容器镜像仓库),然后由运维团队将其部署到实时的生产环境。它可以解决开发团队和业务团队之间的可见性和沟通不佳的问题。为此,持续交付的目的就是拥有一个可随时部署到生产环境的代码库,并确保以最少的工作量部署新代码。
什么是持续部署?
成熟的 CI/CD 管道的最后一个阶段是持续部署。持续部署是持续交付的延伸,可以指自动将开发人员的更改从存储库发布到生产环境,以供客户使用。
CD 解决了运维团队因手动流程过多导致应用交付速度变慢的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。
实际上,持续部署意味着开发人员对云应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这使得持续接收和整合用户反馈变得更加容易。综上所述,所有这些相互关联的 CI/CD 事务均能降低应用部署的风险,从而更轻松地以小块的形式发布对应用的更改,而不是一次性发布所有更改。
然而,由于在生产前的管道阶段没有人工关卡,因此,持续部署在很大程度上依赖于精心设计的测试自动化。这意味着持续部署可能需要大量的前期投入,因为需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段。
CI/CD 与 DevOps 相比
CI/CD 是 DevOps 方法的重要组成部分,旨在促进开发和运维团队之间的协作。CI/CD 和 DevOps 均注重代码集成流程的自动化,以加快将某个想法(例如某个新的功能、功能增强请求或 bug 修复)从开发到部署到可为用户提供价值的生产环境中的整个流程。
常用的 CI/CD 工具有哪些?
CI/CD 工具可以协助团队自动进行开发、部署和测试。一些工具专门处理集成(CI)方面的问题,一些工具负责管理开发和部署(CD)工作,而另外一些工具则专注于持续测试或相关功能。
Tekton Pipelines 是一个面向 Kubernetes 平台的 CI/CD 框架,可通过容器为您提供标准的云原生 CI/CD 体验。
除了 Tekton Pipelines,其他开源 CI/CD 工具包括:
Jenkins,旨在处理从简单的 CI 服务器到完整的 CD 中心的任何事务
Spinnaker,一个面向多云环境构建的 CD 平台。
GoCD,一个侧重于建模和可视化呈现的 CI/CD 服务器。
Concourse, “一个开源的持续作业器”。
Screwdriver,一个面向 CD 设计的构建平台。