持续集成和部署

小麦2024年11月26日1192 字

前端代码写完后,如何部署到服务器上供用户访问?

简单粗暴的做法是将源代码本地打包后,再手动上传到服务器上。对于简单的业余项目来说,这没太大问题。

但在现代化的多人协作场景下,这种方式缺少标准化约束,会导致许多问题。比如本地打包如何保证依赖包的健康和一致性?手动上传构建产物效率低下,以及存在安全风险。

持续集成和部署系统的出现,就是为了将这个过程标准化和自动化。

持续集成和部署简称 CI 和 CD,我们先来说持续集成(CI)。

持续集成系统会按照预先编排好的自动化流水线(pipeline),对源代码进行处理,得到集成产物。

首先,开发者将源代码提交到版本控制系统,随后持续集成系统会创建一个虚拟容器,拉取最新代码,然后执行项目的自定义脚本(通常是安装、构建和测试脚本等等),最后生成集成产物(可以是测试报告、构建产物等)。

这是一个前端开源库 dayjs 使用 Github Actions 持续集成服务,自动运行单元测试的流水线配置。

我们可以看到,流水线会在 master 或 dev 分支代码变更后自动执行,

流水线会创建带有四个不同版本的 Node.js 的虚拟环境,来测试代码对它们的兼容情况。

随后,执行依赖包安装,lint 检查、单元测试和覆盖率脚本,然后将报告通过 codecov 组件上传,最终形成这样一份覆盖率报告。

在这样一个简单的流水线中,我们还可以做更多有价值的事情。

上期视频中我们提到,持续集成过程中容易产生供应链安全的问题,

可以通过依赖锁文件或接入安全组件来屏蔽恶意软件。

除此之外,根据业务研发流程需要,还可以对流水线中的每个阶段设置门禁检查规则。

比如拉取代码后检查基线是否最新,构建前对代码执行静态检查,构建后检查产物大小等等。

接下来我们说持续部署(CD)。

持续部署通常紧接着持续集成进行,即我们将持续集成阶段输出的构建产物,作为持续部署的输入,通过自动化流水线部署到目标环境中。

持续部署系统的重要功能之一是对发布流程的控制。

首先,它可以控制将构建产物发布到应用服务器、NPM 和 CDN 等多个目标。

其次,它可以进行灰度发布,即按照白名单或百分比,分批发布而是不一次性全部发布,来减少故障影响面。

最后,持续部署系统可以在任意时间回滚变更到上一个版本,

假设灰度发布期间观测到预期外的异常,可以快速回滚到上一个版本,实现应急止血。

持续部署系统的另一重要特性是环境隔离。

在分支代码研发的场景中,开发者在开发分支上推送的代码,会部署到开发环境(线下环境),代码经过测试后再合并到主干分支(main),随后部署到生产环境(线上环境)。

这样在保证研发效率的同时,又可以提升生产环境的稳定性。

要自己从零建设一套持续集成和部署系统是非常复杂的,而 Jenkins、Travis CI 和 Github Actions 都是不错的选择。

你可能觉得持续集成和部署是高阶玩法,我用不上,但实际上它是现代研发流程中不可缺少的一部分。

即便是个人项目,你也可以用非常低的成本接入它。

本期我们介绍了持续集成和部署系统的相关概念,功能和应用。下一期我们聊聊应用发布上线后,应该关注哪些问题。

我是小麦,我们下期再见。

评论

你需要先登录才能发表评论
Made by 捣鼓键盘的小麦 / © 2025 Front Talk 版权所有