赞
踩
如何把开发好的代码部署到线上。
对于这个问题,你可能脱口而出:“使用npm run build就好了呀”。
这样做只是在本地把代码打包,如果想要在线上也可以访问这些代码,那么还需要加上部署的过程。
代码部署难点在 jQuery 时代之前,前端项目中所有的内容都是一些简单的静态资源。那个时候,网站还没有部署的概念,网站上线前,我们直接把开发完的项目打包发给运维,再由运维把代码直接上传到服务器的网站根目录下解压缩,这样就完成了项目的部署。后来的 jQuery 时代,项目的入口页面被后端管理,模板部署到了后端,CSS、JavaScript 和图片等静态资源依然是打包到后端之后,再解压处理。但现在,我们对前端的性能和稳定性的要求也越来越高,jQuery 时代的那种简单的部署模式就不足以应对性能优化、持续部署等一系列的情境。现在前端所处的时代,我们主要会面临后面这些代码部署难点:
当我们面对这些代码部署上的难点,特别是在团队协作的项目中遇到时,我们就可以考虑对项目进行自动化部署了,这样代码部署的速度和稳定性会给项目研发效率带来很好的提升。
如何把打包好的代码上传到服务器这个问题,就值得我们去好好探究,琢磨出一个好的解决方案。
当然了,完成这些操作之后,还要能通过脚本自动通过内部沟通软件通知团队项目构建的结果。但是在项目部署的过程中,迎面而来的可能是下面这些问题:
如何自动化执行部署的全过程,如果每次都由人工执行,就得消耗一个人力守着编译打包了,而且较为容易引发问题,比如测试的步骤遗漏或部署顺序出错。那么如何提升构建速率,就成了部署功能中需要解决的重要问题。
为了解决上面这些问题,业界提出了一些解决方案:比如,采用能保证环境一致性的 Docker;自动化构建触发可以通过 GitHub Actions;GitHub 的 actions 功能相当于给我们提供了一个免费的服务器,可以很方便地监控代码的推送、安装依赖、代码编译自动上传到服务器。
项目上线后的自动化部署前端项目的自动化部署完成后,我们可以保证上线的稳定性,但是后续的持续上线怎么办?
直接发到生产环境,会面临极大的风险。
但如果不直接发布到生产环境,我们就不能在本地和测试的前端环境去连接生产环境的数据库。
所以我们需要一个预发布的(Pre)环境,这个环境只能让测试和开发人员访问,除了访问地址的环节不同,其他所有环节都和生产环境保持一致,从而提供最真实的回归测试环境。
这个时候,我们会遇见下面这些问题:
这个时候,时间就是金钱,如果你在修复 Bug 和重新部署项目上,耗费了过多的时间,那么就会导致项目故障时间过长的问题。
为了解决上面说到的这些问题,我们需要一种机制,能够让我们在发现问题之后,尽快地将版本进行回滚,并且在回滚的操作过程中,尽可能不需要人力的介入。
所以,我们需要静态资源的版本管理,具体来说,就是让每个历史版本的资源都能保留下来,并且有一个唯一的版本号,如果发生了故障,能够瞬间切换版本。这个过程由具体的代码实现之后,我们只需要点击回滚的版本号,系统就会自动恢复到上线前的版本。在这种机制下,如果你的业务流量特别大,每秒都有大量用户访问和使用,那么直接全量上线的操作就会被禁止。为了减少上线时,部署操作对用户造成的影响,我们需要先选择一部分用户去做灰度测试,也就是说,上线后的项目的访问权限,暂时只对这些用户开放。
在 Gtihub 中,我们可以使用 actions 去配置打包的功能,下面的代码是 actions 的配置文件。在这个配置文件中,我们使用 Ubuntu 作为服务器的打包环境,然后拉取 GitHub 中最新的 master 分支代码,并且把 Node 版本固定为 14.7.6,执行 npm install 安装代码所需依赖后,再执行 npm run build 进行代码打包压缩。在下面的代码中,我们就通过 GitHub Actions 自动化打包了一份准备上线的代码。
name: 打包应用的actions on: push: # 监听代码时间 branches: - master # master分支代码推送的时候激活当前action jobs: build: # runs-on 操作系统 runs-on: ubuntu-latest steps: - name: 迁出代码 uses: actions/checkout@master # 安装Node - name: 安装Node uses: actions/setup-node@v1 with: node-version: 14.7.6 # 安装依赖 - name: 安装依赖 run: npm install # 打包 - name: 打包 run: npm run build
然后,我们需要配置上线服务器和 GitHub Actions 服务器的信任关系,通过 SSH 密钥可以实现免登录直接部署。我们直接把 build 之后的代码打包压缩,通过 SSH 直接上传到服务器上,并且要进行代码文件版本的管理,就完成了代码的部署。最后一步,就是部署成功后的结果通知了。现在办公软件钉钉和飞书都提供了相关的推送结果,我们可以随时通过群机器人接口把消息推送到群内,关于钉钉机器人的适用文档,你直接看官方的开发文档就可以了,我们需要做的是把版本号、部署日期、发起人等信息推送到对应接口,这样就完成了自动化部署的操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。