CI/CD:持续集成与交付详解
CI/CD 使顶尖科技公司能够每天多次改进其产品。以下是您需要了解的内容,以便实现同样的目标。
什么是 CI/CD?
CI/CD 是一种软件开发方式,可以随时以可持续的方式发布更新。当代码修改成为常规操作时,开发周期会更加频繁、更有意义、更快速。
“CI/CD”代表持续集成(CI)和持续交付(CD)的结合实践。
持续集成是 CI/CD 的先决条件,并且要求:
- 开发人员每天多次将他们的更改合并到主代码分支。
- 每次代码合并都会触发自动化代码构建和测试序列。理想情况下,开发人员可以在 10 分钟内收到结果,以便专注于自己的工作。
持续集成的任务是生成可部署的工件。CI 中的自动化测试的作用是验证给定代码版本的工件是否可以安全部署。
在持续交付的实践中,代码变更也会持续部署,尽管部署是手动触发的。如果将代码从源仓库迁移到生产环境的整个过程完全自动化,则该过程称为持续部署。
冗长的部署流程容易出错,而且容易分散注意力。开发人员会因为感觉过度的部署流程而感到沮丧。团队会放弃小规模的迭代,转而选择风险高昂的大规模发布。他们甚至可能因此完全放弃一些小的改进。
CI/CD 的目标是使部署足够简单、安全且快速。在这种情况下,引入重大错误的可能性很低。当问题确实发生时,可以轻松交付修复或撤销更改。
实施 CI/CD 的试金石
如果您团队中的任何开发人员都可以停止他们现在正在做的事情,并在 20 分钟或更短的时间内将当前开发版本的代码投入生产,而无需任何人担心会发生什么 - 恭喜,您正在进行 CI/CD!
CI/CD 原则
持续交付实践通过描述成功生产部署的原则,进一步推进了持续交付:
- 以支持迭代发布的方式构建系统。避免组件之间紧密耦合。实施有助于实时检测问题的指标。
- 始终保持代码处于可部署状态。维护全面且健康的自动化测试套件。在设计中内置监控、日志记录和容错功能。
- 以小规模迭代的方式进行开发。例如,如果您在功能分支上进行开发,则这些分支的生命周期不应超过一天。当您需要更多时间开发新功能时,请使用功能开关。
- 开发人员可以将代码推送到类似生产的暂存环境中。这确保了新版本的软件在到达用户手中时能够正常运行。
- 任何人都可以按需将任何版本的软件部署到任何环境,只需按一下按钮即可。如果您需要查阅 wiki 来了解如何部署,那就没戏了。
- 构建了就运行。自主的工程团队应该对其构建的软件的质量和稳定性负责。这打破了传统开发人员和运维团队之间的隔阂,使他们能够携手合作,实现更高层次的目标。
为了使 CI/CD 成为现实,您需要自动化软件交付过程中可以自动化的一切,并在CI/CD 管道中运行它。
CI/CD 工作流程示例
这是一个全自动 CI/CD(持续部署)流水线的简单示例。一切从简,精益求精!
在此示例中,主 Git 分支上的每个更改都会在Semaphore上执行以下步骤:
- 构建代码和网络资产,同时重用依赖缓存。
- 运行自动化测试套件。这是一个 JavaScript / Node.js 应用程序,因此测试是用 Jest 编写的。
- 如果测试通过,部署块将更新在云中运行的生产代码。
带有手动步骤的 CI/CD
以下是容器和 Kubernetes 的 CI/CD 工作流程,其中包含更多步骤:
在此示例中,每个更改都会自动执行以下步骤:
- 从源代码和依赖项构建应用程序。
- 运行自动化测试套件。
- 如果测试通过,则自动构建 Docker 容器镜像并将其推送到私有注册表。
在 Docker 构建流水线的末端,我们得到了一个可用的构件,即容器镜像。开发人员(或者更正式地称为发布经理)可以决定手动触发:
- 部署到暂存或生产阶段,可能包括烟雾测试以验证没有引入重大问题。
- 将容器镜像标记为引入生产的工件,以启用审计和回滚。
想要了解更多?访问 Semaphore 网站,了解 CI/CD 的优势以及典型的采用流程(包括看似不可能的情况)。
文章来源:https://dev.to/semaphore/ci-cd-continuous-integration-delivery-explained-75l