什么是 CI/CD?持续集成和持续交付
什么是持续集成(CI)?
持续整合 是一种软件开发方法,团队成员每天至少集成一次他们的工作。在这种方法中,每个集成都由自动构建检查以检测错误。这个概念最早是在二十多年前提出的,目的是避免“集成地狱”,即当集成被推迟到项目结束时发生的。
在持续集成中,代码提交后,软件会立即构建和测试。在拥有众多开发人员的大型项目中,一天内会进行多次提交。每次提交代码都会进行构建和测试。如果测试通过,则测试构建以进行部署。如果部署成功,则将代码推送到生产环境。此提交、构建、测试和部署是一个持续的过程,因此称为持续集成/部署。
什么是持续交付(CD)?
连续交付 是一种软件工程方法,团队可以在短周期内开发软件产品。它确保软件可以随时轻松发布。持续交付的主要目的是以良好的速度和频率构建、测试和发布软件。它允许在生产中进行频繁更新,从而帮助您降低交付变更的成本、时间和风险。
CI 和 CD 有什么区别?
不使用 CI 的开发与使用 CI 的开发
以下是使用 CI 和不使用 CI 进行开发之间的主要区别:
无需 CI 的开发 | 使用 CI 进行开发 |
---|---|
很多错误 | 更少的错误 |
不频繁提交 | 定期提交 |
发布频率低且速度慢 | 定期发布工作版本 |
整合困难 | 轻松有效的集成 |
测试进行得很晚 | 持续集成测试发生得很早并且很频繁。 |
提出的问题更难解决 | 更快、更有效地发现并解决问题。 |
项目可见性差 | 更好的项目可见性 |
编译和持续集成之间的区别
编译仅编译代码,而 CI 执行以下活动
数据库集成
- 确保数据库和代码同步
- 自动创建数据库和测试数据。
代码检查
- 确保代码库健康
- 尽早发现问题并应用最佳实践
自动化部署
- 允许您随时发布产品
- 持续可演示状态,可在任何机器上运行
文档生成
- 确保文档是最新的
- 去除显影剂上的烧焦物
- 生成构建报告和指标
汇编
编译是计算机将高级编程语言代码转换为计算机能够理解的机器语言的过程。它确保每个目标平台上都有一个代码编译器。
我什么时候建造?
- 每次办理登机手续时
- 每次依赖关系发生变化时
持续集成有哪几个步骤?
- 理想情况下,构建应该来自命令行,而不应该依赖于集成开发环境(IDE)。
- 构建应该使用专用的 Cl 服务器持续进行,而不是 cron 作业。
- 每次签到时都应触发构建的 CI,而不仅仅是在午夜
- 构建应该提供即时反馈,不需要开发人员付出任何努力
- 确定关键指标并进行可视化跟踪。更重要的是,立即采取行动
进行CI流程需要什么?
以下是执行整个 CI 过程所需的关键要素:
- 版本控制系统(VCS): 它提供了一种可靠的方法来集中并保存您的项目在一段时间内所做的更改。
- 虚拟机: 你应该有一个备用服务器,或者至少有一个 虚拟机 来构建您的系统。
- 托管 CI 工具解决方案: 为了避免使用服务器或虚拟机,您应该选择托管 CI 工具解决方案。此工具有助于维护整个流程并提供更轻松的可扩展性。
- 工具: 如果你选择自托管版本,则需要安装以下众多版本之一 CI工具 像詹金斯一样, TeamCity, Bamboo、GitLab等
持续集成如何工作?
您肯定知道诺基亚的旧手机。诺基亚曾经实施过一种称为夜间构建的程序。在白天来自不同开发人员的多次提交之后,该软件每晚都会构建一次。由于该软件每天只构建一次,因此在大型代码库中隔离、识别和修复错误非常麻烦。
Later,他们采用了持续集成方法。开发人员提交代码后,软件就会立即构建和测试。如果检测到任何错误,相应的开发人员可以快速修复缺陷。
CI 的特点
以下是持续集成的重要特性和优点:
- 允许您仅维护一个源存储库
- 您可以测试生产 CI 环境的克隆
- 建设的环境应当贴近生产环境。
- 持续集成的优点之一是当前构建的持续可用性
- 所有堆栈持有者都应该能够看到构建、测试和部署的完整过程。
为什么使用 CI?
以下是使用持续集成的重要原因:
- 帮助您构建更高质量的软件
- CI流程有助于扩大工程团队的人数和交付产出。
- CI 允许软件开发人员并行独立地开发功能。
- 帮助您进行可重复的测试
- 提高可见性,实现更好的沟通
- 帮助开发可能交付的产品,实现完全自动化构建
- 通过使部署更快、更可预测来帮助您降低风险
- 问题出现时立即反馈
- 避免在发布日期和时间上出现最后一刻的混乱
使用 CI 系统的最佳实践
以下是实施过程中的一些重要最佳实践
- 尽早提交并经常提交,绝不提交损坏的代码
- 立即修复构建失败
- 根据指标采取行动
- 构建每个目标环境从每个构建中创建工件
- 软件的构建需要以自动化的方式进行
- 不依赖 IDE
- 当发生变化时构建并测试一切
- 数据库模式至关重要
- 帮助你找出关键指标并进行可视化跟踪
- 经常提早办理登机手续
- 更强的源代码控制
- 无论何时提交代码,持续集成都会运行单元测试
- 自动化构建并测试所有人
- 通过自动化部署保持快速构建
CI 的缺点
以下是持续集成过程的缺点/不足之处:
- 需要初始设置时间和培训来熟悉 Cl 服务器
- 开发合适的测试程序至关重要
- 完善的测试套件需要大量 Cl 服务器资源
- 熟悉流程的转换
- 需要额外的服务器和环境
- 当多个开发人员想要同时集成他们的代码时,可能会出现等待时间
CI流程的工具
以下是一些最重要的 CI/CD 工具:
詹金斯
詹金斯 是一款开源持续集成软件。它使用 Java 编程语言。它有助于实时测试和报告更大规模代码库中的孤立更改。该软件可帮助开发人员快速查找和解决其代码库中的缺陷并自动测试其构建。
Bamboo
Bamboo 是一个持续集成构建服务器,可在一个地方自动执行构建、测试和发布。它与 JIRA 软件和 Bitbucket 无缝协作。 Bamboo 支持多种语言和技术,例如 CodeDeply、Docker、Git、SVN、Mercurial、AWS 等 Amazon S3 存储桶。
TeamCity
TeamCity 是一个支持许多强大功能的持续集成服务器。即使没有构建运行,它也能保持 CI 服务器的健康和稳定。它为任何项目提供更好的代码质量
总结
- 持续集成定义:持续集成是一种软件开发方法,团队成员每天至少可以集成一次他们的工作
- CI/CD 是持续集成和持续交付或持续部署的组合。
- 没有 CI 的开发会产生很多错误,而使用 CI 的开发会减少错误
- 持续集成的重要活动是1)数据库集成,2)代码检查,3)自动部署、文档生成和编译。
- 构建应该使用专用的 Cl 服务器持续进行,而不是 cron 作业。
- CI 的重要元素是 1)版本控制系统 2)虚拟机 3)主机 CI 工具解决方案 4)工具
- 持续集成系统允许您仅维护一个源存储库
- CI/CD 流程可帮助您构建质量更好的软件
- 最重要的最佳实践 Azure 持续集成过程是尽早提交并经常提交,永远不会提交损坏的代码
- 的主要缺点是 CI/CD 管道 过程是,开发良好的测试套件需要 Cl 服务器提供很多资源
- 詹金斯, Bambook、Team City 是一些有用的 AWS Continuous Delivery 集成工具.