青云QingCloud
作者青云QingCloud·2020-02-14 22:28
技术经理·北京青云科技股份有限公司

本来生活网 DevOps 升级之路

字数 2069阅读 761评论 0赞 0

本文来自 KubeSphere 社区用户本来生活网架构师杨杨

大家好;我叫杨杨 是的姓杨 名杨 怎么样;就是这么霸气(主要是爸妈懒得给我想名字 T T ) 大概介绍下我 和 我们公司走DevOps这条路的初衷吧
我就职于 本来生活 网 负责发布系统架构;我们公司呢,咋说呢,简单说就是买水果蔬菜的 具体的大家去百度本来生活就知道;公司走上容器平台的DevOps这条康庄大道主要目标 有三:

1、提高资源利用率

2、提高发布效率

3、降低运维的工作成本等等

其实最主要的还是 就是 省钱; 对就是 省钱; 别问我为啥知道;

好了废话就不多说了,再说某周同学又说我太啰嗦了;接下来就是我们本来生活的DevOps升级之路

Level1:

我们 从初步接触DevOps相关知识 ;到接触到KubeSphere后;

开始学习Jenkins的Pipeline的各种操作、语法、插件等;

然后开始构建适合我们自己的CICD的整个流程

最终结合者KubeSphere平台初步实现了第一级的CICD流程;

这个级别的流程主要实现了 拉取代码、编译应用、发布镜像到本地仓库、部署到本地集群;如下图

积累经验值:

初步完成CICD流程后,我们继续研究和完善;

比如研究JenkinsPipeline的自定义方法,实现动态生成应用相关信息;

研究Jenkins的插件,实现上传Ftp、通过命令动态部署ConfigMap、存储等等

Level 2:

经过不停的努力学习 jenkins语法 及插件后 我们的CICD流程升级到2级; 加入了 部署配置、部署存储、上传cdn等,如下图:

小坑1-动态参数:

因为业务需要,我们的CICD流程需要 分为 几种类型的发布,而每种类型的发布都需要不同的参数;

于是我们按照之前学习到的Jenkins Pipeline语法 想当然的使用When条件语句去判断传入的发布类型跳转到不同Stage ,然后在通过Input输入参数语句实现不同参数的输入,

但是发现Input参数语句的优先级高于When条件语句,也就是说不管我选择哪个发布类型都要先输入参数, 然后系统才会去判断是否跳过该Stage;这与我们想的完全不一样。

于是我们各种google 百度,最后找到另外一种 input语法 可以input的优先级降低 使得when条件语句先判断,这样就满足了我们的需求。

Level3:

经过采坑动态参数;升级到3级CICD流程:新增了根据不同发布类型的任务 动态生成 所需参数;具体流程如下图:

小坑2-ConfigMap:

在实际生成环境中我们回滚肯定是要 应用的程序 和 配置一起回滚的,但是k8s的configmap是没有版本控制的,这就很奔溃;于是我们只能使用笨办法,在每次发布应用时,去配置中心抓取当前应用的配置生成configmap;并且在configmap名称后面跟上当前应用的发布版本,然后在部署到k8s时会将该版本的ConfigMap挂载到当前发布的Deployment中这样我们在回滚或发布时就能直接将应用的镜像和ConfigMap一起回滚到指定版本。

唯一美中不足就是ConfigMap会越来越多,后期只要定时清理就好。

连环坑:线下访问线上数据库:

为了应用镜像从线下环境上传到线上生产环境的镜像仓库;我们踩了个连环坑,先是折腾了好久 镜像仓库的 https登陆;登陆的坑填平了,又掉到 push 镜像的坑里。最后发现就是一个小小的配置导致的push 镜像到线上环境失败。反正 这两个坑 折腾了我们蛮久的时间。不过好在最终都解决了

标准化流程:

经过前期各种学习和采坑,我们的CICD流程基本成熟了后,我们开始考虑是不是能把整个流程标准化,每个应用只需要调用这个标准化流程去执行发布就好;而不是把CICD流程写到每个应用的JenkinsPipeline中;不然以后应用多了,万一需要修改CICD流程,想想有那么多应用的流程要修改,会奔溃的。于是我们又开始google、百度,寻找了一大圈;终于发现了一个叫 Jenkins扩展共享库 ;通过Jenkins扩展共享库我们把CICD流程拆分为 通用方法 和 流程逻辑 两块;

然后每个应用的JenkinsPipeline中只需按要求传入参数,然后调用要执行的流程方法即可;每个应用的JenkinsPipeline的代码量从原来的 500多行 减少到了 30行 不到。

Level9:

经过采坑和填坑的不懈努力 我们积累了庞大的经验值;一下子跳级到 9级,CICD流程有了质的飞跃;化整为零了。以后再也不用担心甲方随便更改流程啦

以后发布 只需要点击运行 选择好发布类型和环境,然后点击确定, 然就可以去喝咖啡安静的等待喽

查看 KubeSphere 项目
KubeSphere 开源社区:kubesphere.io
KubeSphere 项目 Github 地址:https://github.com/kubesphere
需要 KubeSphere 商用支持:https://kubesphere.qingcloud.com

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广