前端发布规范
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 包在云端机是增量安装的
- 由于全量安装或编译npm包是非常耗时的行为,因此我们设计成增量模式。
^语义版本
的考虑,在不同时间执行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 还是需要深入考虑下控制流程
6. HTTP配置
- 动静分离
- 静态内容,是指同一个URL,不管何时进行请求,响应的内容总是一致的。
- 而动态内容,同一URL所包含的内容是随着时间变化的
- 这点的不同,会影响资源的缓存策略使用
- 动态内容发布至动态集群
- 使用
cache-control:no-cache
策略(注意与must-revalidate
和no-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 重定向至新应用。
- 删除在发布系统中的对应应用,封存与应用关联的仓库。
问题
- 动态服务集群是增量发布的,这里指的是不会删除原有文件
附录