git commit 关联icafe
到 git push之后触发的:安全检查、格式校验、合入冲突等;
agile的发布分支
orp的上线
整个上线大概会用到3个平台: icode\agile\orp
如果要做一个 icafe关联后 直接一键发布的 上线平台,需要解决的问题:
如果做一个上线平台,需要走的步骤:
静态资源部署、预览机、单台、单边、全量(灰度发布又是啥?)
快速回滚的方案
参考资料:百度鳗鱼-如何从 0 到 1 打造团队 PC/H5 构建工具
CI/CD释义
CI(Continuous Integration)简称持续集成,原意是各个开发者在开发过程中,需要将代码集合到一起,比如我们的 GitLab,GitHub 等。现在大多会包含集成之后,自动触发编译,测试等过程,帮助开发者及时收集问题。
CD(Continuous Delivery)指的是> 持续交付和> 持续部署,经过 CI 后,代码自动部署到服务器上的一个过程
- 代码托管:我们有 GitHub/GitLab/还有国内的码云,Coding 之类的平台;
- 构建:对于 Java 有 Maven,对于前端是 npm;
- 集成:有 Jenkins,Travis,测试对于前端是 Mocha/Jest 之类的工具;
- 部署:物理机/虚拟机/Docker K8s 等等
git hook
git commit 钩子
- precommit: 提交前进行代码检查,如eslint;触发自动化测试(mocha):husky工具
- pre-receive: 准入之前的校验:复用率检查、安全扫描等
合入代码后,进行打包构建:npm run build
编译:babel转换、ts解析、icon处理生成iconfont、代码合并压缩、静态变量替换
CI 的一个核心点,是自动化,就是在代码提交之后能自动去运行打包的脚本,而不是我在本地打包之后一起提交带代码库里面。工具:Travis CI
构建
流程:
深入下去可以细究的点:
git hook:
Git hook 触发方式:自动/定时/其他流水线关联触发
代码提交了之后是自动触发的,那怎么去做到定时触发,怎么去在一个代码库编译完了之后,通知另外一个代码库去做编译。
监听分支:怎么匹配?(精确/前缀/正则/排除)
还有分支,有时候我们只想 dev 分支去做自动编译,master 分支需要有特殊控制,怎么去更好的监听分支的变化
使用那些钩子去做检查
构建:
环境变量有哪些,不同流程如何传递
环境变量有哪些,不同流程之间怎么做到一些通用变量共享
需要哪些环境,怎么切换
有哪些环境,比如说 node8,node10,怎么去特定换定编译,怎么切换
并行&串行
怎么去做并行编译
机器对编译产出怎么存的,过期时间?
- 异常处理,超时机制
- 是否要在编译前做代码的各自检查,成功后才编译
发布策略
way1:蓝绿部署
指我们同时运行两个版本的应用,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上
way2:滚动发布
部署-前端资源替换方式
当我们拿到了产出,怎么把产出给弄到不同的环境,怎么优雅的上线
本质是丢资源,http ftp等
有个亮点:
common文件可以放在cdn,动态链接的方式,就能解决common发布之后其他仓库无需发布上线的需求。
但新的问题是:cdn的缓存如何解决?
===> 上图提供了解决方案: 多一层 Nginx 去控制资源的版本切换,(如 默认使用lastest
是不是我们的 common 有救了??
验证:
可以在自己的otp机器上 的Nginx修改,
然后 修改common,手动部署到机器上
不修改fe-pc-ucenter,但此时pc-ucenter里依赖的common的资源就是最新的了
验证步骤:
1、pc-ucente依赖的common资源确定 收敛范围
2、将确定的依赖的 common资源,改写为js的方式,转存的cdn
3、增加BFF层(如nginx)转发 bos里common的请求,每次拿最新的给前端
4、修改common,部署发布 增加一步:打包资源推送到cdn
5、访问ucenter,验证common的是否更改 (如 弹窗 or log加个拦截之类的)
部署的思考点:
- 如何指定部署某个环境(dev?prod?
- 怎么做权限控制
- 成功通知、失败回滚通知
- 怎么打版本号
- sourcemap怎么存,怎么关联
- 日志的上报存储分析
- 物理机/docker的分别部署方式
还有:
- 代码跟需求卡片关联
- 自动提测(根据当前commit生成提测邮件并部署到测试环境)
- 各种服务端的检查,各种测试,审批等等