昨天早上我整理好手头的 task,刚安排好当天要做的事情,做了一点点,就听到办公室有人在说正式版服务挂了,用七牛 CDN 的所有项目都打不开,因为七牛 CDN 挂了,我想到我们还有 pc 端,静态资源不走 CDN,就跟同事说让外面用着 PC 版先,功能都一样的,同事说视频,文档这些动态调用的静态资源都放在七牛,上传图片的路径也是七牛,还是会有部分功能用不了,不过我想我们也没办法,感觉这是服务端的事情,我这边应该也不用做什么措施,继续淡定的敲我的代码。

过了没多久看到群里有同事发了有学校要求我们管控平板摄像头的要求,因为有学生用这个来干坏事,我还是当吃瓜群众,淡定的吃我的瓜。上午快下班了,老大要求我们整理出自己的所有项目用了哪些 CDN,OSS 之类的,我想了想除了静态文件上传到七牛,图片上传到七牛还有就是视频也存在七牛,很快整理好了。

午休发现有同事竟然没午休,还在小会议室忙着,看来外部服务还没修好,这应该是重大事故了。中午看到群里的消息说找到了 CDN 被封的原因了,因为有学生在作业中上传了不和谐的内容,导致我们的 CDN 被封了,最后跟七牛沟通了下才给我们解封,服务端同学还在努力的找到那个上传的学生账号。

下午经过讨论,我们前端出了一个解决方案,服务降级。之前我们的静态资源都依赖 CDN,没有备用的方案,这里就存在一个问题,CDN 挂了,我们的页面都会挂,才会有这次的重大事故。由于我们编译后的整个文件都会上传到自己服务器的 docker,只是在 ci 阶段替换了静态资源路径为七牛路径,所以很好做开关降级,只需要服务端根据情况改变七牛路径环境变量的值就好了。

但是这意味着我们的所有项目 ci 需要重跑一遍,若是说单纯触发一下 ci 线程倒是很简单,但是由于我们的 tag 一样,再跑的话不会再次上传 docker,最后加班把自己手头的十多个项目都去打了 tag 重跑,再一个个项目去确认路径有没有被替换,真的效率很低下。这里我们讨论能不能做一个集中部署的东西,目前是可以集中触发 ci 线程的,但是那个只会触发最新的一个,而不能指定是哪一个,要做这个还需要服务端做一些支持,感觉也不好推进。

通过这件事,我们也发现很有必要有一个默认 ci 模板,因为很多项目的 ci 都是一样的,每次都是去以前的项目中复制,要是 gitlab 有一个自定义的默认模板,就可以每次生成项目就生成了响应的可用 ci,可以省去不少事情。另外,有很多的项目配置文件其实是一样的,我个人其实是有做成脚手架的想法,但只是有个想法,迟迟没有动手,得空再看看有没有这个必要写,有必要的话就写一个。