前端发布规范

1. Git 与分支开发模型

  • 权限管理 》合理授权 owner 、master、develop、reporter 权限,最小授权原则。
  • 仓库组织 》创建仓库时,请归属正确的 group
  • 仓库命名 》采用小写字符和-来命名,禁止拼音缩写。
  • 分支开发模型
    • 最新的稳定代码存放在 [gitlab]master 分支上
    • 部署用分支必须命名为 [gitlab]publish/x.x.x
    • 部署用分支必须合并过 [gitlab]master,才能 git push 成功
    • 测试环境部署使用部署用分支的最新commit,线上部署采用预发测试通过的commit
    • 线上发布成功后,新分支的对应commit 自动合并入[gitlab]master
    • 线上发布成功后,自动生成命名为 [gitlab]prod_x.x.x 的 tag
    • 线上发布成功后,自动删除对应的部署用分支

2. 域名规范

  • 前端页面
  • 数据接口
  • 流式传输
  • websocket
  • 静态资源CDN
  • 图片CDN
  • 内网应用的域名特征
  • 测试环境的域名特征

3. 云端构建

区分于本地构建,开发者只需在仓库中存放源码与构建脚本,对于版本管理有好处。

构建环境

git   2.7.0
node  v6.9.1
npm   v3.10.8
npm registry http://npm.idcvdian.com/
  • 云端构建即在云端机上按序执行如下命令
git reset --hard && git clean -df                     # 清理临时文件和/或不干净的工作区
git fetch origin                                      # sync the local repos with the gitlab
git checkout -b ${branchName} origin/${branchName}
npm update && npm prune           # install new pkg, update exist pkg version and remove extra pkg
npm ls --depth=0
npm outdated
npm run daily/pre/prod
  • 云端构建命令规范,
  • npm包的版本控制:由开发者控制,建议使用 ^语义版本 或固定版本号 npm --save-exact
  • 选用 npm 包时,请尽量选择测试覆盖率100%且有持续集成的npm包,这是重要的质量保障

npm 包在云端机是增量安装的

  1. 由于全量安装或编译npm包是非常耗时的行为,因此我们设计成增量模式。
  2. ^语义版本的考虑,在不同时间执行 npm update 所最终确定的版本可能不同,因此构建线上包时会跳过 npm update 过程

4. 打包和部署

  • 待打包部署的代码存放在对应仓库的 build 目录中(该目录可以由云端构建生成,也可以是在版本控制中)
  • 前端打包规则
    • build目录中有 pages 目录(允许没有),该目录下文件应打包并发布到动态集群,
    • build目录中有 static 目录(允许没有),该目录下文件应打包并发布到静态集群(CDN)
  • hybrid打包规则
    • build/static 目录,如果不存在,则退出 hybrid 打包流程。
    • manifest.json,程序自动生成
    • sign.map,程序自动生成
  • hybrid包,是指静态资源预先离线在APP中,在APP中打开h5时,h5引用CDN资源的请求会被拦截,并使用hybrid包中的对应内容响应,提升网络性能。

5. 发布流程

  • 部署规范
  • 项目发布流程图
  • 发布系统流程图
  • abtest的设计
  • ?? abtest 还是需要深入考虑下控制流程

6. HTTP配置

  • 动静分离
    • 静态内容,是指同一个URL,不管何时进行请求,响应的内容总是一致的。
    • 而动态内容,同一URL所包含的内容是随着时间变化的
    • 这点的不同,会影响资源的缓存策略使用
  • 动态内容发布至动态集群
    • 使用 cache-control:no-cache 策略(注意与 must-revalidateno-store 都有些差异)
    • 协商缓存目前已取消,因为最终的响应内容是实时生成的而非静态化
    • 就之前的数据研究,存在协商缓存时有20%访问返回302,而在弱网下最大网络瓶颈主要是RTT
  • 静态内容发布至CDN(也包含图片使用图片CDN)
    • 配置 cache-control:max-age,须处理好缓存穿透,不懂请阅读
    • 配置 cache-control:s-max-age,用于控制响应头更新(或者借助于CDN服务商)
    • 配置 access-control-allow-origin:*,支持跨域允许
    • 配置 timing-allow-origin:*,支持性能信息获取
    • 图片CDN的特殊性是因为对图片有更好的优化策略,包括实时的裁剪、缩放、压缩、格式转换等
    • 图片防盗链?
  • 后端数据
    • 配置 Access-Control-Allow 相关字段
    • referrer 限制
    • 前后端跨域原则
      • 本地前端环境,应能跨域访问各套后端环境,以便于开发联调,
      • 对应前端环境,支持跨域访问对应后端环境,
      • 任何前端环境,支持跨域访问线上后端环境,
      • 不可降级跨域访问,高层环境不能跨域到底层后端环境
  • Referrer Policy:暂无处理
  • X-Frame-Options:暂无处理
  • Content Secure Policy
  • HTTPS 配置,提升安全和性能
    • 开启 SPDY3.1 和 HTTP2 支持
    • 开启会话复用(Session Resume)
    • 配置完整证书链(certificate chain)
    • 开启 OCSP stapling,未开启
    • 开启 HSTS,未开启
    • 开启 HTTP Public Key Pinning,未开启

7. 自助数据分析-kibaba

8. 应用下线流程

  • 由于业务变动,某些应用会需要及时下线。此时要做好以下工作,以确保无后患。
  • 降低该应用的访问量,达成3天内极少访问量,或 302 重定向至新应用。
  • 删除在发布系统中的对应应用,封存与应用关联的仓库。

问题

  • 动态服务集群是增量发布的,这里指的是不会删除原有文件

附录