什么是 CI/CD?持续集成和持续交付
什么是持续集成 (CI)?
持续集成是一种软件开发方法,团队成员每天至少集成一次他们的工作。在这种方法中,每次集成都会通过自动化构建进行检查以检测错误。这个概念首次提出于二十多年前,旨在避免“集成地狱”,即当集成被推迟到项目结束时发生的问题。
在持续集成中,代码提交后,软件会立即构建和测试。在一个有许多开发人员的大型项目中,每天会进行多次提交。每次提交时,代码都会被构建和测试。如果测试通过,构建会进行部署测试。如果部署成功,代码会推送到生产环境。这种提交、构建、测试和部署是一个持续的过程,因此得名持续集成/部署。
什么是持续交付 (CD)?
持续交付是一种软件工程方法,团队以短周期开发软件产品。它确保软件可以随时轻松发布。持续交付的主要目标是高速高频地构建、测试和发布软件。它通过允许频繁的生产更新来帮助您降低交付变更的成本、时间和风险。
CI 和 CD 有什么区别?
不使用 CI 的开发与使用 CI 的开发
以下是使用 CI 或不使用 CI 进行开发的主要区别
不使用 CI 进行开发 | 使用 CI 进行开发 |
---|---|
大量错误 | 更少的错误 |
不频繁的提交 | 定期提交 |
不频繁且缓慢的发布 | 定期可用的发布 |
集成困难 | 轻松有效的集成 |
测试发生晚 | 持续集成测试尽早并经常发生。 |
提出的问题更难解决 | 更快、更有效地发现和解决问题。 |
项目可见性差 | 更好的项目可见性 |
编译与持续集成的区别
编译只编译代码,而 CI 执行以下活动
数据库集成
- 确保数据库和代码同步
- 自动化创建数据库和测试数据。
代码检查
- 确保健康的 codebase
- 尽早识别问题并应用最佳实践
自动化部署
- 允许您随时发布产品
- 持续可演示的状态,并且可以在任何机器上工作
文档生成
- 确保文档是最新的
- 减轻开发人员的负担
- 生成构建报告和指标
编译
编译是计算机将高级编程语言代码转换为机器语言(计算机能够理解)的过程。它确保每个目标平台都有一个代码编译器。
我什么时候构建?
- 每次签入时
- 每次依赖项更改时
持续集成包含哪些步骤?
- 理想情况下,构建应该来自命令行,并且不应依赖于集成开发环境 (IDE)。
- 构建应使用专用的 CI 服务器持续进行,而不是 cron job。
- CI 构建应在每次签入时触发,而不仅仅是在午夜
- 构建应提供即时反馈,并且不需要开发人员的努力
- 识别关键指标并进行可视化跟踪。更重要的是,立即采取行动
进行 CI 过程需要什么?
以下是您执行整个 CI 过程所需的核心要素
- 版本控制系统 (VCS):它提供了一种可靠的方法来集中化和保存项目随时间变化的变更。
- 虚拟机:您应该有一个备用服务器或至少一个虚拟机来构建您的系统。
- 托管 CI 工具解决方案:为了避免服务器或虚拟机,您应该选择托管 CI 工具解决方案。此工具有助于维护整个过程并提供更轻松的可扩展性。
- 工具:如果您选择自托管版本,您需要安装众多CI 工具之一,例如 Jenkins、TeamCity、Bamboo、GitLab 等。
持续集成如何工作?
您一定知道老式手机诺基亚。诺基亚曾经实施一个名为夜间构建的程序。在白天多个开发人员多次提交后,软件每天晚上都会进行构建。由于软件每天只构建一次,因此在大型代码库中隔离、识别和修复错误非常痛苦。
后来,他们采用了持续集成方法。一旦开发人员提交代码,软件就会立即构建和测试。如果检测到任何错误,相应的开发人员可以快速修复缺陷。
CI 的特点
以下是持续集成的重要功能和优点
- 允许您只维护一个源代码仓库
- 您可以测试生产 CI 环境的克隆版本
- 构建环境应与生产环境接近。
- 持续集成的一个优点是当前构建的持续可用性
- 构建、测试和部署的完整过程应向所有利益相关者可见。
为什么要使用 CI?
以下是使用持续集成的重要原因
- 帮助您构建更高质量的软件
- CI 过程有助于扩大工程团队的人员规模和交付产出。
- CI 允许软件开发人员并行独立地开发功能。
- 帮助您进行可重复测试
- 增加可见性,促进更好的沟通
- 帮助开发一个可能可交付的产品,用于完全自动化构建
- 通过使部署更快、更可预测来帮助您降低风险
- 问题出现时立即反馈
- 避免发布日期和时间上的最后一刻混乱
使用 CI 系统的最佳实践
以下是一些实施时的重要最佳实践
- 尽早提交,经常提交,永不提交损坏的代码
- 立即修复构建失败
- 根据指标采取行动
- 在每个目标环境中构建,从每个构建创建工件
- 软件的构建需要以可自动化的方式进行
- 不要依赖 IDE
- 当一切发生变化时,构建并测试所有内容
- 数据库 schema 算作一切
- 帮助您发现关键指标并进行可视化跟踪
- 经常并尽早签入
- 更强的源代码控制
- 持续集成是指每当您提交代码时运行单元测试
- 自动化构建和测试每个人
- 通过自动化部署保持构建快速
CI 的缺点
以下是持续集成过程的缺点/不足
- 需要初始设置时间和培训才能熟悉 CI 服务器
- 开发合适的测试程序至关重要
- 完善的测试套件需要 CI 服务器的许多资源
- 熟悉过程的转换
- 需要额外的服务器和环境
- 当多个开发人员几乎同时集成代码时,可能会出现等待时间
CI 过程的工具
以下是一些最重要的 CI/CD 工具
Jenkins
Jenkins 是一款开源持续集成软件。它使用 Java 编程语言编写。它有助于对大型代码库中的隔离更改进行实时测试和报告。该软件帮助开发人员快速发现和解决其代码库中的缺陷,并自动化其构建的测试。
Bamboo
Bamboo 是一个持续集成构建服务器,在一个地方执行自动构建、测试和发布。它与 JIRA 软件和 Bitbucket 无缝协作。Bamboo 支持多种语言和技术,例如 CodeDeploy、Docker、Git、SVN、Mercurial、AWS 和 Amazon S3 存储桶。
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 持续集成工具。