实习总结
拿到腾讯这个 offer 纯属意外,当初得知需要线下面试的时候,拒绝了线下面试的邀请。最后面试官(现 leader)打电话过来问拒绝的原因,得知原因后 leader 给了个机会线上面,最后拿到了这份实习 offer。
从 7 月份实习到现在也半年多了,在这个半年多的时间里,接触到了不少东西,比如工具类vtools
xboos
mojo
等,也实践了很多自己的想法,还是有一些收获的,所以决定写一篇总结。
关于技术、业务
文档输出
刚来的时候和另外两个实习生写了大概 3 个礼拜的技术文档吧。补全了各种文档,也是第一次写技术文档。在写文档的过程中读完了express-ci
的源码,这是一个express
的改版,无中心路由的一个 node 框架,通过中间件解析出querystring
中的path
controller
method
然后实例化 controller 然后去调用,但是在阅读代码的过程中发现express-ci
的几个问题
express-ci
自己维护的中间件模型是混乱的。express-ci
频繁实例化controller
的类,每一次请求都需要实例化一次
这种无中心的路由方式其实有好有坏,好的在于下一个接手代码的人很容易的就能知道这个请求的处理方法在哪里,坏的在于管理混乱,并且对开发者约束太强。
工程开发体验
刚开始实习的时候,大部分工程还在 svn 上,正在逐步的往 git 上迁移。当时的发布流程是本地构建文件,然后上传到 svn,再通过发布系统去拉 svn 的文件发布的 IDC,然后就会有特性相互覆盖的事件发生。并且由于所有人的构建环境都不一样,很危险,而且发布的时候 每个人的权限都非常大,经常都是免测发布,以至于,我刚到的时候都不敢用那个发布系统,每次都是找同事帮忙发,直到现在,我还是没学会那个发布系统(因为已经抛弃那个系统了)。
给同事介绍 CI 和 CD 的概念之后,开始尝试提升整个开发的体验,想在现有的条件下,最轻量的接一个集成系统。研究了Jenkins
Drone
还有部门的Jats
Jats
是部门一直有的集成系统,但是主要是针对 Cpp 和移动端的集成。经过以下尝试:
- drone 接入内部 git
- 搭建 Jenkins 接入内部 git
- 使用 jats 搭建 web 发布环境
经过这些尝试后,使用了jats
发布了一段时间,稍微提升了一点开发体验,但是其实感受没有特别明显。
直到现在,公司内部有了类似 tranvisCI 的工具,公司内部几个 CI 系统的竞争,我们也选择了某个 CI 工具,开发体验有了大幅度提升,不需要 scp 去部署开发环境,不需要上传 svn 去部署测试环境和发 IDC。
在探索这个的过程中还是有一些阻碍的,比如最开始由于公司网络隔离,导致构建的机器没办法通过 22 端口拉git
的依赖。有一些私有依赖都是放在 git 上的,npm install
的时候没办法拉下来这些依赖。于是写了一个工具去分析这些依赖,然后通过git clone
的方式安装下来,场景越来越复杂,最后这个工具也迭代了好多版本。不过现在网络环境优化,已经弃用了这个工具了。
还有测试环境隔离,在测试环境需要把不同版本隔离开来,于是写了一个工具,自动管理这些版本,工具在 github 私有仓库躺着。最后也没派上用场。因为 IDC 上不是 docker 环境,为了保持环境的一致性,所以最后写了个脚本,对代码工作目录和启动的端口做了隔离。
这段时间也了解到了不少东西,比如Monorepo
与Multirepos
学到了一些相关的工具lerna
teambit
等。
这部分应该是实习这段时间做出最大贡献的一部分吧。个人认为。