什么是 CI/CD?持续集成和持续交付

什么是持续集成 (CI)?

持续集成是一种软件开发方法,团队成员每天至少集成一次他们的工作。在这种方法中,每次集成都会通过自动化构建进行检查以检测错误。这个概念首次提出于二十多年前,旨在避免“集成地狱”,即当集成被推迟到项目结束时发生的问题。

在持续集成中,代码提交后,软件会立即构建和测试。在一个有许多开发人员的大型项目中,每天会进行多次提交。每次提交时,代码都会被构建和测试。如果测试通过,构建会进行部署测试。如果部署成功,代码会推送到生产环境。这种提交、构建、测试和部署是一个持续的过程,因此得名持续集成/部署。

什么是持续交付 (CD)?

持续交付是一种软件工程方法,团队以短周期开发软件产品。它确保软件可以随时轻松发布。持续交付的主要目标是高速高频地构建、测试和发布软件。它通过允许频繁的生产更新来帮助您降低交付变更的成本、时间和风险。

CI 和 CD 有什么区别?

CI 与 CD:持续集成 (CI) 是一种自动测试代码库中每个变更的方法,而持续交付 (CD) 是一种获取新功能、配置和错误修复变更的方法。

不使用 CI 的开发与使用 CI 的开发

以下是使用 CI 或不使用 CI 进行开发的主要区别

不使用 CI 进行开发 使用 CI 进行开发
大量错误 更少的错误
不频繁的提交 定期提交
不频繁且缓慢的发布 定期可用的发布
集成困难 轻松有效的集成
测试发生晚 持续集成测试尽早并经常发生。
提出的问题更难解决 更快、更有效地发现和解决问题。
项目可见性差 更好的项目可见性

编译与持续集成的区别

Activities in Continuous Integration
持续集成中的活动

编译只编译代码,而 CI 执行以下活动

数据库集成

  • 确保数据库和代码同步
  • 自动化创建数据库和测试数据。

代码检查

  • 确保健康的 codebase
  • 尽早识别问题并应用最佳实践

自动化部署

  • 允许您随时发布产品
  • 持续可演示的状态,并且可以在任何机器上工作

文档生成

  • 确保文档是最新的
  • 减轻开发人员的负担
  • 生成构建报告和指标

编译

编译是计算机将高级编程语言代码转换为机器语言(计算机能够理解)的过程。它确保每个目标平台都有一个代码编译器。

我什么时候构建?

  • 每次签入时
  • 每次依赖项更改时

持续集成包含哪些步骤?

CI Process
CI 过程
  • 理想情况下,构建应该来自命令行,并且不应依赖于集成开发环境 (IDE)。
  • 构建应使用专用的 CI 服务器持续进行,而不是 cron job。
  • CI 构建应在每次签入时触发,而不仅仅是在午夜
  • 构建应提供即时反馈,并且不需要开发人员的努力
  • 识别关键指标并进行可视化跟踪。更重要的是,立即采取行动

进行 CI 过程需要什么?

Conduct CI Process

以下是您执行整个 CI 过程所需的核心要素

  • 版本控制系统 (VCS):它提供了一种可靠的方法来集中化和保存项目随时间变化的变更。
  • 虚拟机:您应该有一个备用服务器或至少一个虚拟机来构建您的系统。
  • 托管 CI 工具解决方案:为了避免服务器或虚拟机,您应该选择托管 CI 工具解决方案。此工具有助于维护整个过程并提供更轻松的可扩展性。
  • 工具:如果您选择自托管版本,您需要安装众多CI 工具之一,例如 Jenkins、TeamCity、Bamboo、GitLab 等。

持续集成如何工作?

您一定知道老式手机诺基亚。诺基亚曾经实施一个名为夜间构建的程序。在白天多个开发人员多次提交后,软件每天晚上都会进行构建。由于软件每天只构建一次,因此在大型代码库中隔离、识别和修复错误非常痛苦。

后来,他们采用了持续集成方法。一旦开发人员提交代码,软件就会立即构建和测试。如果检测到任何错误,相应的开发人员可以快速修复缺陷。

Example of Continuous Integration
持续集成示例

CI 的特点

以下是持续集成的重要功能和优点

  • 允许您只维护一个源代码仓库
  • 您可以测试生产 CI 环境的克隆版本
  • 构建环境应与生产环境接近。
  • 持续集成的一个优点是当前构建的持续可用性
  • 构建、测试和部署的完整过程应向所有利益相关者可见。

为什么要使用 CI?

以下是使用持续集成的重要原因

  • 帮助您构建更高质量的软件
  • CI 过程有助于扩大工程团队的人员规模和交付产出。
  • CI 允许软件开发人员并行独立地开发功能。
  • 帮助您进行可重复测试
  • 增加可见性,促进更好的沟通
  • 帮助开发一个可能可交付的产品,用于完全自动化构建
  • 通过使部署更快、更可预测来帮助您降低风险
  • 问题出现时立即反馈
  • 避免发布日期和时间上的最后一刻混乱

使用 CI 系统的最佳实践

以下是一些实施时的重要最佳实践

  • 尽早提交,经常提交,永不提交损坏的代码
  • 立即修复构建失败
  • 根据指标采取行动
  • 在每个目标环境中构建,从每个构建创建工件
  • 软件的构建需要以可自动化的方式进行
  • 不要依赖 IDE
  • 当一切发生变化时,构建并测试所有内容
  • 数据库 schema 算作一切
  • 帮助您发现关键指标并进行可视化跟踪
  • 经常并尽早签入
  • 更强的源代码控制
  • 持续集成是指每当您提交代码时运行单元测试
  • 自动化构建和测试每个人
  • 通过自动化部署保持构建快速

CI 的缺点

以下是持续集成过程的缺点/不足

  • 需要初始设置时间和培训才能熟悉 CI 服务器
  • 开发合适的测试程序至关重要
  • 完善的测试套件需要 CI 服务器的许多资源
  • 熟悉过程的转换
  • 需要额外的服务器和环境
  • 当多个开发人员几乎同时集成代码时,可能会出现等待时间

CI 过程的工具

以下是一些最重要的 CI/CD 工具

Jenkins

Jenkins

Jenkins 是一款开源持续集成软件。它使用 Java 编程语言编写。它有助于对大型代码库中的隔离更改进行实时测试和报告。该软件帮助开发人员快速发现和解决其代码库中的缺陷,并自动化其构建的测试。

Bamboo

Bamboo

Bamboo 是一个持续集成构建服务器,在一个地方执行自动构建、测试和发布。它与 JIRA 软件和 Bitbucket 无缝协作。Bamboo 支持多种语言和技术,例如 CodeDeploy、Docker、Git、SVN、Mercurial、AWS 和 Amazon S3 存储桶。

TeamCity

TeamCity

TeamCity 是一个持续集成服务器,支持许多强大的功能。即使没有构建正在运行,它也能保持 CI 服务器健康稳定。它为任何项目提供更好的代码质量

摘要

  • 持续集成定义:持续集成是一种软件开发方法,团队成员每天至少集成一次他们的工作
  • CI/CD 意味着持续集成与持续交付或持续部署的结合。
  • 不使用 CI 进行开发会产生大量错误,而使用 CI 进行开发则会减少错误。
  • 持续集成的重要活动是 1) 数据库集成,2) 代码检查,3) 自动化部署,文档生成和编译。
  • 构建应使用专用的 CI 服务器持续进行,而不是 cron job。
  • CI 的重要元素是 1) 版本控制系统 2) 虚拟机 3) 主机 CI 工具解决方案 4) 工具
  • 持续集成系统允许您只维护一个源代码仓库
  • CI/CD 过程帮助您构建更高质量的软件
  • Azure 持续集成过程最重要的最佳实践是尽早提交,经常提交,永不提交损坏的代码。
  • CI/CD 管道过程的主要缺点是完善的测试套件需要 CI 服务器的许多资源。
  • Jenkins、Bamboo 和 TeamCity 是一些有用的 AWS 持续集成工具