相信我,一切事情的发生都是赶鸭子上架,没有例外。人类所有伟大的变革都是迫不得已,可又是那么顺其自然。比如容器(docker)技术的诞生,比如箭在弦上的创业,比如野心勃勃的kubernetes,比如如今已作为左膀右臂的rancher,比如这篇文章。
不同于郑兄的CI/CD实践《如何利用Docker构建基于DevOps的全自动CI》,我们结合自身状况,构建了一套我们自己的DevOps CI/CD流程,更轻更小,更适合Startup。
如果世界只有FLAG、BAT,那就太无趣了。iHealth是一家初创型公司,我所在的部门有大概10名研发人员,在担负着三端研发工作的同时,所有围绕服务的交付和运维工作也都是我们来做。
技术的选型上,服务端、Web端和移动端(Android、iOS)都要上,但人少。所以招人的时候并没有以貌取人的资格,部门对外的Title都是全栈。能一门语言通吃三端,群众基础广泛,恐怕没有比Javascript/Typescript(Node.js)更合适的了。
服务端有Express、Koa、Feather、Nest、Meteor等各有其长的框架,前端大而火的Reactjs、Vuejs和Angular,不管是Server Render还是前后端分离,都可以得心应手。因为公司的健康设备(血糖仪、血压计、体温计、血氧、体脂秤等等)会有专门的部门研发设计以及提供SDK,所以移动端的研发工作更多是在设计实现和性能优化上,React Native是一枚大杀器。虽然现在公司并没有桌面端的需求,但不能否认的是Electron是一个很有趣的项目,也为“全栈”这个词增加了更多背书。
另外,选择使用Node/Js/Ts作为全栈的基础会附带有RPC的好处。无需集成传统意义上的RPC框架(如gRPC),只需在编写远程(微)服务方法时,编写相应的npm package,也可以达到相同的目的,且成本更小,更易理解。
运维环境的选型上,所有的业务都运行在云端,省去了机房维护和服务器运维的成本。其实在盘古开荒时,我们也是编写了Node程序后,使用PM2部署在服务器上,并没有使用Docker。当然也存在没有使用Docker所带来的一切问题:三端不同步、环境无法隔离……而Docker带给我最大的惊喜除了超强的可移植性,更在于研发人员可以非常容易对程序的顶级架构进行推理。
事实上,我们直接使用docker-compose做容器编排着实有一段时间,在一次大规模的服务器迁移中,发现需要重新思考越来越多的container管理和更完善的编排方案。Rancher(Cattle)就是在这时被应用到技术栈中。
在运维环境一波三折的同时,DevOps的征程也是亦步亦趋,步步惊心。幸运的是,我们知道自己缺乏什么,想要什么,所以能比较容易的做到“哪里不会点哪里”。如同上一章节所述,合适的才是最好的。持续集成(CI)与持续交付(CD)的迭代过程,从最初的代码拷贝,到结合docker-compose与rsync命令,到使用CI/CD工具,做到相对意义上的自动化……迄今为止,我们摸索出一套相对好用并且好玩的流程:
故事大致是这样的,当一只代码猴提交代码之后,他需要去接一杯咖啡。在猫屎氤氲的雾气里45°角仰望天花板,手机微信提醒这次构建成功(或失败,并附带污言秽语)。这时他可以开始往工位走,坐下时,微信又会提醒本次部署到Rancher成功(或失败)。
这一切开始的地方是github。当开发者写完 BUG 功能之后,需要有地方保存这些宝贵的资料。之所以没有使用Gitlab或Bitbucket搭建私有的Git服务器,是因为我们认为代码是最直接的价值体现。服务如骨架,终端如皮肤,UE如衣服,三者组成让人赏心悦目的风景,代码是这背后的基础。我们认为在团队精力无法更分散、人口规模尚小时,购买Github的商业版是稳妥且必要的,毕竟那帮人修复一次故障就像把网线拔下来再插上那样简单。
Drone这个单词在翻译中译作雄蜂、无人机。我特意咨询了一位精通一千零二十四国语言的英国朋友,说这个词的意思是autonomous,works by itself。白话就是有活它自己干,而且是自主的。不过这个解释对于Drone来说名副其实。这个在Github上拥有13,000+ Stars的开源项目,使用Golang编写,相比Jenkins的大而全,Drone是为Docker而生的CI软件。如果有使用过Gitlab CI的小伙伴,相信对Drone的使用方式不会感到陌生,他们都是使用Yaml风格文件来定义pipeline:
build:
image: node:latest
commands:
- npm install
- npm run lint
- npm run test
publish:
image: plugins/npm
when:
branch: master
Drone的安装方式如同Rancher一样简单,一行docker命令即可。当然,大家也可以看Drone的官方文档,在这里,只讲一下使用Rancher catalog安装Drone的方式:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务