cicd 08--基于Jenkins的通用可扩展CICD架构
- 3 案例
1 介绍
随着运维业务的逐渐增加,团队维护的 cicd 流程种类也随之增加,基于Jenkins 的流程基本可以认为绝大多数都是一种定制(当然有些流程可以通过参数解决一类的问题),会对后期带来越来越多的工作量。
因此需要将 jenkins job 抽象出来,使其功能单一、可复用,基于抽象出来的基础 job 再组装成各种满足用户需求的任务。
最终实现的效果为: 一个大的pipeline 能通过类似搭积木的方式快速构建和修改, 大pipeline 调用了多个子pipeline, 通过一连串的子 pipeline 完成用户的需求,使用子 pipeline 的时候只需按需传参数即可.
2 架构
2.1 架构图
主要架构图如下所示, sre 主要做 底层可复用的job, 然后每一个流程都可以分解为多个底层可复用的job, 将这些job 按顺序拼装, 并传递相关参数, 子job 全部执行完成即可完成一个大的流程.
最终将一个主 job 交付给用户即可.
架构优点: 避免重复造轮子, 简化复杂job 的构造过程, sre专注于底层基础job
2.2 主要模块功能
此处列举一些常用的底层job, 后续会在此处新增底层基础job, 需要确保这些job可复用.
- Clone 代码
- 同一机器拷贝文件
- 远程机器拷贝文件
- Build & push 镜像
- Deploy 镜像
- 更新 configmap
- 更新副本数量
- 功能检测
- 删除文件
- 其它基础功能
3 案例
3.1 场景说明
假设当前有两个底层基础job, 分别为 job-a 和 job-b, 它们都有各自唯一的功能. 此时有一个功能复杂的job job-multi, 该job 可以通过 job-a 和 job-b 协作完成.
三个 job 如下所示:
3.2 Job-multi 的功能脚本
逐 job 的pipeline 脚本如下, 如果有更多其它业务, 也可以按需通过 stage的方式加入, 并填好相关参数即可。
3.3 执行结果
主流程执行完成
主流程触发 job-a 执行完成任务
主流程触发 job-b 执行完成任务
4 优化实施
实施该方案的时候需要确保各个操作相对单一,因此需要优化现有 ci 、cd 和其它复杂操作,使其更加单一, 此处列举几个常见的优化项。
- 优化现有的 ci 操作, 使其单一, 将无关操作隔离出来
- 优化现有 cd 操作, 使其单一, 抽出无关操作
- 引入制品库或者基础镜像, 减少build 的依赖, 提高build 的速度
5 注意事项
- Sre 或者 Devops 人员专注于 底层基础job, 因此需要确保基础 job 可复用, 避免团队内部人员每次重新造一遍轮子.
6 说明
软件环境:
Docker: 20.10.*
Jenkins 版本: 2.334
参考文档:
jenkins 官方文档
jenkins pipeline之如何串联多个Job