CI/CD如何支撑运维自动化

运维思索


运维工作中的重复性工作有哪些?

新服务器上架,与CMDB、监控、堡垒机联动同步;
操作系统初始化,包括用户、内核、安装源、规范目录、安全基线等;
基础组件初始化,包括Java环境、Pyhon环境、Nginx等各种组件;
应用版本发布、回滚,此过程与监控联动;
应用管理操作,如启动、停止、重启等;
监控系统与应用相关监控项的创建、禁用、启用等;
……
上述这些重复性的工作会零碎的分散在我们日常的运维过程中,我们有什么办法能够通过自动化的方式来处理这些琐碎的事情呢?

我的解决方案就是借助Jenkins 通过CI/CD的方式来实现运维自动化。之所以选择Jenkins,不只是因为其能够通过各种插件实现各种工具的集成,更重要有以下几点:

BlueOcean

Jenkins官方从用户角度出发,可使复杂的pipeline可视化,快速直观地理解管道状态。

扩展共享库

通过共享库可以实现多个项目之间共享流水线,有助于减少冗余并保持代码干净整洁。

Pipeline

流水线既可以作为job独立执行,也可以作为一项任务被其他流水线调用。

总结以上两点:

BlueOcean满足了我对可视化管理界面的需求,降低了运维开发前端管理界面的负担,让我们把精力更多的集中在我们擅长的领域;
扩展共享库更大程度上满足了我对运维岗位的理解:二线运维通过共享库管理提供运维的原子化模块;一线运维通过pipeline自由组合共享库中的原子模块,形成最终的解决方案;
随着原子化的模块不断增多,那么我们的自动化运维就可以覆盖更多的场景,后续通过故障自愈的方式接入,那么就可以给我们释放更多时间,届时真正的SRE将不再是梦!

确保长期关注研发工作:Google 将 SRE 团队的运维工作限制在 50% 以内,剩余的时间花在研发项目上.
----《SRE: Google运维解密》

扩展共享库和流水线

如图,我们通过pipline编排出以下运维场景:

服务器自动上架
基础组件定制化安装
Java应用自动上线
Java应用版本发布
这些场景运行构建时会调用扩展共享库中多个原子化模块,为方便区分我们将各个原子模块针对其功能划分为以下几个级别:

操作系统级
Java应用级
Apollo配置中心级
监控系统级
CMDB级
后续我们可根据实际情况自行添加相关原子模块至扩展共享库中。

场景自动化实现


1.服务器自动上架


服务器的自动上架更多的是借助于蓝鲸标准运维,但因为服务器自动上架也是运维工作中的常见场景,所有在此进行简单说明,具体实现请见《蓝鲸智云实现虚拟机交付》、《运维思索:cmdb打通zabbix、jumpserver探索》。

2.操作系统初始化与基础组件安装


操作系统初始化与基础组件安装借助于Jenkins + Ansible Playbook实现,同时也可以作为一个job由其他场景进行集成调用。其具体功能实现请见《Jenkins+Ansible:助力基础设施建设》。

3.Java应用自动上线

Java应用自动上线一般在应用第一次上线时使用,目的是在明确的运维规范前提下,能够快速上线应用。此过程我们主要使用的时pipeline job 及扩展共享库中的原子模块:

CMDB级模块:根据应用名获取应用IP;
pipeline job:基础组件初始化;
apollo配置中心级模块:配置发布;
Java应用级模块:应用版本发布、健康检查及应用启停等;
监控系统级模块:监控项新增;
通过这一些列的搭配,我们实现了Java应用自动上线的运维场景。

4.Java应用版本发布

Java应用版本发布包含发布、回滚两部分,在此我们统一以发布为准。此过程主要使用的是扩展共享库中的原子模块:

CMDB级模块:根据应用名获取应用IP;
apollo配置中心级模块:配置发布;
监控系统级模块:屏蔽监控;
Java应用级模块:应用版本发布、健康检查及应用启停等;
监控系统级模块:恢复监控;
由于版本发布在各公司的具体流程有所不同,在此我们需要根据实际情况自行调整,将流程中缺失的环节可以做成原子模块增加到扩展共享库。

总结


CI/CD不仅能够在企业DevOps进程中发挥重要作用,其实在运维自动化过程中也能做到足够有效的支撑。因此如果我们只将其当作成一个打包工具就大错特错了,其带给我们思想上的转变则更加有意义。
————————————————

文章来自网络,如有侵权,将第一时间删除内容。
文章作者:CSDN博主「木讷大叔爱运维」
原文链接:https://blog.csdn.net/yanggd1987/article/details/121750197

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/6148787/blog/5782305