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

492 阅读5分钟

重复性运维工作

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

  • 新服务器上架,与CMDB、监控、堡垒机联动同步;
  • 操作系统初始化,包括用户、内核、安装源、规范目录、安全基线等;
  • 基础组件初始化,包括Java环境、Pyhon环境、Nginx等各种组件;
  • 应用版本发布、回滚,此过程与监控联动;
  • 应用管理操作,如启动、停止、重启等;
  • 监控系统与应用相关监控项的创建、禁用、启用等; ……

上述这些重复性的工作会零碎的分散在我们日常的运维过程中,我们有什么办法能够通过自动化的方式来处理这些琐碎的事情呢?

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

  • BlueOcean

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

  • 扩展共享库

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

  • Pipeline

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

总结以上两点:

  1. BlueOcean满足了我对可视化管理界面的需求,降低了运维开发前端管理界面的负担,让我们把精力更多的集中在我们擅长的领域;
  2. 扩展共享库更大程度上满足了我对运维岗位的理解:二线运维通过共享库管理提供运维的原子化模块;一线运维通过pipeline自由组合共享库中的原子模块,形成最终的解决方案;

随着原子化的模块不断增多,那么我们的自动化运维就可以覆盖更多的场景,后续通过故障自愈的方式接入,那么就可以给我们释放更多时间,届时真正的SRE将不再是梦!

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

扩展共享库和流水线

image.png

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

  • 服务器自动上架
  • 基础组件定制化安装
  • Java应用自动上线
  • Java应用版本发布

这些场景运行构建时会调用扩展共享库中多个原子化模块,为方便区分我们将各个原子模块针对其功能划分为以下几个级别:

  • 操作系统级
  • Java应用级
  • Apollo配置中心级
  • 监控系统级
  • CMDB级

后续我们可根据实际情况自行添加相关原子模块至扩展共享库中。

场景自动化实现

1.服务器自动上架

image.png

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

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

image.png

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

3.Java应用自动上线

image.png

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

  • CMDB级模块:根据应用名获取应用IP;
  • pipeline job:基础组件初始化;
  • apollo配置中心级模块:配置发布;
  • Java应用级模块:应用版本发布、健康检查及应用启停等;
  • 监控系统级模块:监控项新增;

通过这一些列的搭配,我们实现了Java应用自动上线的运维场景。

4.Java应用版本发布

image.png

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

  • CMDB级模块:根据应用名获取应用IP;
  • apollo配置中心级模块:配置发布;
  • 监控系统级模块:屏蔽监控;
  • Java应用级模块:应用版本发布、健康检查及应用启停等;
  • 监控系统级模块:恢复监控;

由于版本发布在各公司的具体流程有所不同,在此我们需要根据实际情况自行调整,将流程中缺失的环节可以做成原子模块增加到扩展共享库。

总结

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