什么是 CI/CD?

复制 URL

CI/CD 是持续集成和持续交付/部署的缩写,旨在简化并加快软件开发生命周期。

持续集成(CI)是指自动且频繁地将代码更改集成到共享源代码存储库中的做法。持续交付和/或持续部署(CD)是一个由两部分组成的过程,涉及代码更改的集成、测试和交付。持续交付不会自动部署到生产环境,持续部署则会自动将更新发布到生产环境。

 

CI/CD Flow

 

 

这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持,采用的方法不是 DevOps 就是站点可靠性工程(SRE)

CI/CD 可帮助企业组织避免错误和代码故障,同时保持软件开发和更新周期的持续。

随着应用规模的扩大,CI/CD 的功能有助于降低复杂性、提高效率并简化工作流。

CI/CD 可自动执行以前将新代码从提交到生产所需的人工干预,因此可最大限度地减少停机时间,并加快代码的发布速度。而且,由于能够更快地将更新和更改集成到代码中,因此,可以更加频繁、高效地采纳用户的反馈意见,从而为最终用户带来积极的效果,客户的整体满意度也会有所提高。 

平台工程与DevOps

CI/CD 中的“CI”始终指持续集成,这是一种面向开发人员的自动化流程,有助于更频繁地将代码更改合并回共享分支或“主干”。进行这些更新时,会触发测试步骤的自动执行,以确保合并代码更改的可靠性。

现代应用开发的目标是让多位开发人员同时处理同一应用的不同功能。但是,如果企业组织安排在一天内将所有分支源代码合并在一起(称为“合并日”),最终可能造成工作繁琐、耗时,而且需要手动完成。

这是因为当某个开发人员单独对应用进行更改时,可能会与其他开发人员同时进行的其他更改发生冲突。如果每个开发人员都自定义自己的本地集成开发环境(IDE),而不是让团队就一个基于的 IDE 达成一致,那么就会让问题更加雪上加霜。

CI 可被视为一种解决方案,用于解决同时开发的应用因分支过多而可能相互冲突的问题。

成功的 CI 意味着,一旦某个开发人员对应用的更改被合并,这些更改就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来进行验证,以确保相应更改不会破坏应用。这意味着要测试从类和函数到构成整个应用的不同模块的所有内容。CI 的优势之一在于,如果自动化测试发现新代码与现有代码之间存在冲突,它能够支持更轻松地快速且频繁地修复这些错误。

CI/CD 中的“CD”指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。二者均与管道中的更多阶段的自动化相关,但有时会分开使用,以说明自动化的程度。选择持续交付还是持续部署取决于开发团队和运维团队的风险承受能力及具体需求。

持续交付是指自动执行 CI 中的构建、单元测试和集成测试后,自动将经过验证的代码发布到存储库。因此,要实现有效的持续交付流程,将 CI 内置到开发管道中显得非常重要。

在持续交付中,从合并代码更改到交付生产就绪型版本,每个阶段均涉及测试的自动化及代码发布的自动化。整个流程结束后,运维团队便可以迅速将应用部署到生产环境。

持续交付通常意味着对开发人员对应用所做的更改自动进行错误测试并将其上传到存储库(如 GitHub 或容器镜像仓库),然后由运维团队将其部署到实时的生产环境。它可以解决开发团队和业务团队之间的可见性和沟通不佳的问题。为此,持续交付的目的就是拥有一个可随时部署到生产环境的代码库,并确保以最少的工作量部署新代码。

详细了解持续交付

成熟的 CI/CD 管道的最后一个阶段是持续部署。持续部署是持续交付的延伸,可以指自动将开发人员的更改从存储库发布到生产环境,以供客户使用。

CD 解决了运维团队因手动流程过多导致应用交付速度变慢的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

实际上,持续部署意味着开发人员对云应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这使得持续接收和整合用户反馈变得更加容易。综上所述,所有这些相互关联的 CI/CD 事务均能降低应用部署的风险,从而更轻松地以小块的形式发布对应用的更改,而不是一次性发布所有更改。

然而,由于在生产前的管道阶段没有人工关卡,因此,持续部署在很大程度上依赖于精心设计的测试自动化。这意味着持续部署可能需要大量的前期投入,因为需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段。

详细理解部署自动化

CI/CD 是 DevOps 方法的重要组成部分,旨在促进开发和运维团队之间的协作。CI/CD 和 DevOps 均注重代码集成流程的自动化,以加快将某个想法(例如某个新的功能、功能增强请求或 bug 修复)从开发到部署到可为用户提供价值的生产环境中的整个流程。

在 DevOps 的协作框架中,安全防护是贯穿始终的共同责任。这是一种重要的思维方式,“DevSecOps”一词正是在此基础上诞生的,它强调了在 DevOps 计划中构建安全基础的必要性。DevSecOps(开发、安全防护和运维)是对企业文化、业务自动化和平台设计等方面进行全方位变革,将安全作为整个 IT 生命周期的共同责任。DevSecOps 的一个关键组成部分是引入了安全 CI/CD 管道。

与 DevOps 类似,平台工程也拥有一个共同的目标,即通过提升自动化程度和协作能力来加强开发者和运维团队的整合。DevOps 和 CI/CD 的采用带来了更长的流水线和工具链,因此开发者需要更加深入地了解所构建应用中涉及的复杂细节。

为了应对这些挑战,平台工程作为一门补充学科应运而生,旨在解决企业级 DevOps 扩展所面临的挑战。平台工程是一种基于 DevOps 的策略,通过寻求更优方法来实现应用交付自动化、改善协作与沟通、减少错误、增强安全性和合规性、提高效率,最重要的是,将开发人员的力量重新集中到最需要的地方。

为什么选择红帽来实现 DevOps?

CI/CD 安全防护通过自动化检查和测试来保护代码管道,以防止软件交付中出现漏洞。将安全防护融入到管道(通过安全防护左移和右移等方法)有助于保护代码免遭攻击,防止数据泄露,确保符合政策规定,并保障质量。

开发和部署的节奏本身就快,没有正确的安全防护会使管道暴露于风险之下,例如:

  • 敏感数据暴露给外部来源
  • 使用不安全的代码或第三方组件
  • 未经授权访问源代码存储库或构建工具

识别和缓解软件开发周期中的漏洞,可确保代码更改经过全面测试,并符合安全标准,然后再部署到生产环境。

CI/CD 工具可以协助团队自动进行开发、部署和测试。一些工具专门处理集成(CI)方面的问题,一些工具负责管理开发和部署(CD)工作,而另外一些工具则专注于持续测试或相关功能。

Tekton Pipelines 是一个面向 Kubernetes 平台的 CI/CD 框架,可通过容器为您提供标准的云原生 CI/CD 体验。

详细了解 Tekton Pipelines 

除了 Tekton Pipelines,您可能想要研究的其他开源 CI/CD 工具包括:

  • Jenkins,旨在处理从简单的 CI 服务器到完整的 CD 中心的任何事务
  • Spinnaker,一个面向多云环境构建的 CD 平台。
  • GoCD,一个侧重于建模和可视化呈现的 CI/CD 服务器。
  • Concourse, “一个开源的持续作业器”。
  • Screwdriver,一个面向 CD 设计的构建平台。

此外,团队也可考虑使用托管式 CI/CD 工具,它们可从不同供应商处获得。主流公共云提供商全部提供 CI/CD 解决方案,以及 GitLabCircleCITravis CIAtlassian Bamboo 及众多其他工具。

此外,任何工具只要是 DevOps 的基本工具,就有可能属于 CI/CD 流程的一部分。用于配置自动化(如 AnsibleChefPuppet)、容器运行时(如 Dockerrktcri-o)以及容器编排(如 Kubernetes)的工具严格来说不算是 CI/CD 工具,但它们也现身于许多 CI/CD 工作流中。

根据您首选的应用开发策略和云提供商,您可以采用多种不同的方法来实施 CI/CD。AWS 上的红帽® OpenShift® 服务有多个选项可让您自己的 CI/CD 工作流程变得更轻松,例如 Tekton Pipelines 和 OpenShift Pipelines。通过使用红帽 OpenShift,企业组织可以利用 CI/CD 跨多个本地和云平台自动构建、测试和部署应用。 

我们的专家可帮助企业组织开发所需的实践、工具和文化,从而更高效地实现现有应用的现代化,并加快云原生应用的开发之旅。

红帽® OpenShift® 可以帮助企业组织提高开发人员的工作效率,实现 CI/CD 管道的自动化,提前实施安全防护,并将安全防护贯彻落实到整个开发周期。

红帽 OpenShift Pipelines 在其自有的容器中执行 CI/CD 管道的每个步骤,使得每个步骤可独立扩展以满足管道需求。这意味着管理员和开发人员可以根据其企业组织独特的业务和安全防护要求为应用创建管道蓝图。

红帽 OpenShift GitOpsOperator 可提供与 git 存储库、持续集成/持续交付(CI/CD)工具和 Kubernetes 集成的工作流,以实现更快、更安全、可扩展的软件开发,而不会影响质量。OpenShift GitOps 使客户能够构建声明式的 git 驱动型 CD 工作流,并将其直接集成到应用开发平台。

红帽 Ansible® 自动化平台包含在整个企业组织范围内实施自动化所需的所有工具,其中包括事件驱动解决方案、分析及预构建的内容集。借助其基于 YAML 的通用语言和所需状态方法,您可为每日运维和 CI/CD 管道使用相同的自动化内容。此外,由于其几乎可与 IT 基础架构的各个方面配合使用,因此您可以更轻松、更快速地部署一致的开发、测试和生产环境,从而提高应用的可靠性和弹性。

红帽 Ansible 自动化平台还可与红帽 Kubernetes 高级集群管理集成,允许您在 CI/CD 管道中编排 Kubernetes 集群。您还可以使用人类可读的自动化语言更轻松地构建和维护红帽 OpenShift Operator。

了解自动化如何支持 CI/CD 管道

博客文章

您的战略自主性有多高?红帽数字主权就绪度评估工具简介

红帽数字主权就绪度评估工具 (Red Hat Sovereignty Readiness Assessment tool) 是一款基于 Web 的自助式评估工具,能够针对您组织在七大关键领域的数字化掌控力,提供清晰、客观的基准分析。

红帽开发人员中心业务解决方案

一个基于 Backstage 的开放式企业平台,用于构建开发人员门户,以可视化的方式整合开发过程的各个要素。

扩展阅读

什么是可观测性?

可观测性是指通过检查系统或应用的输出、日志和性能指标来监控、测量和理解系统或应用的能力。

如何构建 DevOps 的指标体系

DevOps 指标用于追踪与软件开发及 IT 运维相关的 DevOps 实践的成效。

文带你理解 DevOps 工程师是什么?负责哪些工作?

DevOps 工程师的职责是引入相应的流程、工具和方法,从而平衡整个软件开发生命周期的需求。DevOps 工程师在组合代码、应用维护和应用管理方面发挥着重要作用。DevOps Engineer 职位解读。

DevOps 相关资源

相关文章