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

什么是持续集成(CI)?
持续整合 是一种软件开发方法,团队成员每天至少集成一次他们的工作。每次集成都会通过自动化构建进行验证,以检测错误。该概念于二十多年前提出,旨在避免“集成地狱”,即集成被推迟到项目后期才进行的情况。
代码提交后,软件会立即进行构建和测试。在拥有众多开发人员的大型项目中,每天会发生多次提交。每次提交后,代码都会被构建和测试;如果测试通过,则检查构建版本是否符合部署要求;如果部署成功,则将代码推送到生产环境。这种提交、构建、测试和部署的循环是持续进行的,这也是这种实践名称的由来。
什么是持续交付(CD)?
连续交付 是一种软件工程方法,团队以短周期开发软件,并确保软件能够随时可靠地发布。其目标是快速、频繁地构建、测试和发布软件,从而降低频繁生产更新带来的成本、时间和风险。
CI和CD之间的区别
持续整合 持续交付是一种自动测试代码库中每个更改的方法,而持续交付则是一种安全快速地将新功能、配置和错误修复等更改引入生产环境的方法。
不使用持续集成 (CI) 的开发与使用持续集成 (CI) 的开发
| 无需 CI 的开发 | 使用 CI 进行开发 |
|---|---|
| 漏洞很多 | 更少的错误 |
| 不频繁提交 | 定期提交 |
| 发布频率低且速度慢 | 定期发布工作版本 |
| 整合困难 | 轻松有效的集成 |
| 测试进行得很晚 | 测试进行得早且频繁。 |
| 问题更难解决 | 问题能更快地被发现和解决。 |
| 项目可见性差 | 更好的项目可见性 |
编译与持续集成的区别
编译只是将代码转换为机器语言,而持续集成则执行更多更广泛的活动:
- 数据库集成: 保持数据库和代码同步,并自动创建数据库和测试数据。
- Code 检查: 确保代码库健康,及早发现问题,并应用最佳实践。
- 自动化部署: 允许您随时发布产品,并使其始终处于可演示状态。
- 文档生成: 保持文档更新,并生成构建报告和指标。
- 汇编: 将高级代码转换为机器语言,并确保它能在每个目标平台上编译。
理想情况下,构建过程应从命令行运行,而不是依赖于 IDE,在专用的 CI 服务器上持续进行(而不是 cron 作业),每次提交代码时都会触发,并且无需开发人员付出任何努力即可提供即时反馈。
开展持续改进流程需要哪些条件?
- 版本控制系统(VCS): 一种可靠的方法,可以集中管理和保存项目随时间推移所做的更改。
- 虚拟机: 一台备用服务器,或者至少一台 虚拟机 来构建您的系统。
- 托管式 CI 工具解决方案: 为了避免管理服务器,托管解决方案可以维护整个流程,并提供更易于扩展性。
- 工具: 如果您选择自托管版本,请安装 CI 工具,例如: Jenkins, TeamCity, Bamboo或者 GitLab。
持续集成是如何工作的?
诺基亚就是一个老例子,它曾经使用一种叫做“夜间构建”的流程。白天,许多开发人员会提交多次代码,然后软件会在每晚进行构建。由于每天只构建一次,因此在庞大的代码库中隔离、识别和修复错误非常困难。
Later 团队采用了持续集成。开发人员提交代码后,软件会立即构建并进行测试,因此任何错误都能立即被发现,负责的开发人员也能迅速修复缺陷。
CI 的特点
- 允许您维护一个单一的源代码库。
- 允许您测试生产环境的克隆版本,该版本与生产环境非常接近。
- 始终提供最新版本。
- 使整个构建、测试和部署过程对所有利益相关者可见。
为什么要使用 CI?
- 帮助您构建更高质量的软件并进行可重复的测试。
- 扩大工程团队的交付产出,并允许开发人员并行开发功能。
- 提高团队内部的透明度和沟通效率。
- 当出现问题时,能够立即提供反馈,并通过加快部署速度和提高部署的可预测性来降低风险。
- 避免发布时出现最后一刻的混乱。
CI系统使用最佳实践
- 尽早提交代码,并经常提交,但永远不要提交有问题的代码。
- 立即修复构建失败并根据指标采取行动。
- 在每个目标环境中构建,并从每次构建中创建工件。
- 实现构建自动化,使其不依赖于集成开发环境 (IDE)。
- 当所有内容发生更改时,包括数据库架构,都需要重新构建和测试。
- 保持构建速度快,并使用自动化部署。
CI 的缺点
- 使用 CI 服务器需要一定的初始设置时间和培训时间。
- 必须制定合适的测试程序,而构建完善的测试套件需要大量资源。
- 需要转换熟悉的流程,并且需要额外的服务器和环境。
- 当多个开发者同时想要集成他们的代码时,可能会出现等待时间。
CI流程工具
Jenkins
Jenkins 是一个用编程语言编写的开源持续集成工具。 Java它有助于对大型代码库中的孤立变更进行实时测试和报告,并帮助开发人员快速发现和解决缺陷,同时实现构建测试的自动化。
Bamboo
Bamboo 是一个持续集成构建服务器,可在同一平台上执行自动化构建、测试和发布。它与 Jira 无缝集成。 Bitbucket 它支持多种技术,例如 Docker、Git、SVN、Mercurial 和 AWS。
TeamCity
TeamCity 是一个功能强大的持续集成服务器。即使没有构建运行,它也能保持 CI 服务器的健康稳定运行,并为任何项目提供更高的代码质量。
