Web 应用程序的 CI/CD
CI/CD:自动化从代码到生产的路径
持续集成和持续部署(CI/CD)是一种自动测试和部署你对代码所做的每一次更改的做法。无需手动运行测试和将文件复制到服务器,而是设置一个管道,为你完成所有工作——从你推送代码的那一刻起,到它在生产中运行的那一刻。
典型管道的工作原理
CI/CD 管道是一系列自动化步骤。当你将代码推送到仓库时,管道启动。首先,它会检查代码的样式问题并进行类型检查以捕获错误。然后运行单元测试,构建应用程序,并针对真实数据库运行集成测试。如果一切通过,它会构建一个 Docker 镜像并将其推送到注册表。CD 部分然后将此镜像部署到暂存环境,运行端到端测试,如果这些测试通过,则部署到生产环境。
这种自动化听起来很复杂,但现代工具使其变得简单。GitHub Actions、GitLab CI 和 CircleCI 是最受欢迎的选择。你在仓库中的 YAML 文件中定义管道,因此管道配置与代码一起进行版本控制。
在每个级别进行测试
一个好的管道在多个级别进行测试。单元测试速度很快,首先运行——它们单独测试各个函数。集成测试验证系统的不同部分是否协同工作,例如你的 API 和数据库。端到端测试模拟真实用户与完整应用程序的交互,在浏览器中运行。每个级别捕获不同类型的问题,按顺序运行意味着你可以快速失败。
部署策略
一旦测试通过,你需要将新代码交付给用户。最安全的方法是逐步部署。蓝绿部署运行两个相同的环境,并在新版本准备就绪时切换流量。金丝雀部署首先将一小部分用户发送到新版本,以便在向所有人推出之前监控问题。功能标志允许你部署隐藏在开关后面的代码,因此你可以独立于部署发布功能。
使管道快速运行
一个需要一小时的管道会鼓励开发人员跳过它。速度很重要。并行运行独立作业。积极缓存依赖项——npm 包、Docker 层和测试结果。首先运行最快的检查,以便尽早失败。对于大型项目,使用更快的硬件或自托管运行器。并且尽可能只运行与更改代码相关的测试。
GitOps:Git 作为唯一真实来源
GitOps 通过使你的 Git 仓库成为应用程序代码和基础设施的唯一真实来源,进一步推进了 CI/CD。ArgoCD 和 Flux 等工具持续监控你的 Git 仓库,并自动同步你的 Kubernetes 集群以匹配其中定义的内容。如果有人对仓库进行了更改,该工具会应用它。如果有人手动更改了集群,该工具会将其还原。这使得部署可审计、可重复且易于回滚。
衡量重要的事情
DORA 指标是衡量 CI/CD 有效性的标准方法:部署频率(你部署的频率)、变更前置时间(从提交到生产的时间)、变更失败率(部署导致问题的频率)以及服务恢复时间(从故障中恢复的速度)。跟踪这些指标有助于你随着时间的推移改进管道。
