cicd 08--基于Jenkins的通用可扩展CICD架构

  • 1 介绍
  • 2 架构
    • 2.1 架构图
    • 2.2 主要模块功能
  • 3 案例
    • 3.1 场景说明
    • 3.2 Job-multi 的功能脚本
    • 3.3 执行结果
  • 4 优化实施
  • 5 注意事项
  • 6 说明

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可复用.

  1. Clone 代码

    英文名称: base_clone_code
    功能说明: clone 代码到指定目录
    参数说明: node: clone 代码所用的Jenkins agent labelgit_repo_url: 代码仓库的urlbranch: 代码对应的分支target_path: 代码clone的目标路径
    其它:
    
  2. 同一机器拷贝文件
    英文名称: base_cp_file
    功能说明: 在同一个机器上拷贝文件(夹)
    参数说明:node: 执行拷贝操作的Jenkins agent labelsrc_file: 原文件(夹)路径des_file: 目标文件(夹)路径
    其它:
    
  3. 远程机器拷贝文件
    英文名称: base_rsync_file
    功能说明: 将本机的文件(夹)拷贝到远程机器上
    参数说明:node:  执行拷贝操作的Jenkins agent labelsrc_file: 原文件(夹)路径 des_host_info: 目标机器的信息,格式为 user_name@des_server_ipdes_file: 目标文件(夹)路径
    其它: 需要提前配置机器 rsync 的 ssh key
    
  4. Build & push 镜像
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  5. Deploy 镜像
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  6. 更新 configmap
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  7. 更新副本数量
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  8. 功能检测
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  9. 删除文件
    英文名称:
    功能说明:
    参数说明:
    其它:
    
  10. 其它基础功能

3 案例

3.1 场景说明

假设当前有两个底层基础job, 分别为 job-a 和 job-b, 它们都有各自唯一的功能. 此时有一个功能复杂的job job-multi, 该job 可以通过 job-a 和 job-b 协作完成.
三个 job 如下所示:

3.2 Job-multi 的功能脚本

逐 job 的pipeline 脚本如下, 如果有更多其它业务, 也可以按需通过 stage的方式加入, 并填好相关参数即可。

pipeline {agent { node { label "admin" } }stages {stage('do job-a') {steps {build job: 'job-a'}}stage('job-multi') {steps {echo 'job-multi'}}stage('do job-b') {steps {build job: 'job-b'}}}
}

3.3 执行结果

主流程执行完成

主流程触发 job-a 执行完成任务

主流程触发 job-b 执行完成任务

4 优化实施

实施该方案的时候需要确保各个操作相对单一,因此需要优化现有 ci 、cd 和其它复杂操作,使其更加单一, 此处列举几个常见的优化项。

  1. 优化现有的 ci 操作, 使其单一, 将无关操作隔离出来
  2. 优化现有 cd 操作, 使其单一, 抽出无关操作
  3. 引入制品库或者基础镜像, 减少build 的依赖, 提高build 的速度

5 注意事项

  1. Sre 或者 Devops 人员专注于 底层基础job, 因此需要确保基础 job 可复用, 避免团队内部人员每次重新造一遍轮子.

6 说明

软件环境:
Docker: 20.10.*
Jenkins 版本: 2.334
参考文档:
jenkins 官方文档
jenkins pipeline之如何串联多个Job

cicd 08--基于Jenkins的通用可扩展CICD架构相关推荐

  1. 基于Jenkins和docker的CI过程

    ZTEsoft-方进 1.基于Jenkins的CI过程 一切要从2013年4月开始说起,当我4月份从委内瑞拉回来之后立即投身到国内一个运营商的大型后端建设项目的尾声中(项目历时3年多,当时已经接近尾声 ...

  2. 基于jenkins结合git实现web程序的多服务器批量发布

    为什么80%的码农都做不了架构师?>>>    由于前一段时间发布了几篇关于web程序基于jenkins部署发布的博文,由于是基于svn作为版本库讲解的.这段时间有一些朋友问我git ...

  3. 天猫php采集列表,QueryList: QueryList是一个基于phpQuery的通用列表采集类,是一个简单、 灵活、强大的采集工具,采集任何复杂的页面 基本上就一句话就能搞定了。...

    #QueryList交流社区: http://querylist.cc/ #QueryList文档: http://doc.querylist.cc/ #QueryList交流QQ群:12326696 ...

  4. mysql连接池_基于Swoole的通用连接池 - 数据库连接池(life)

    open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖版本PHP>=7.0.0Swoole>=4.2.9Recommend ...

  5. 基于jenkins的go语言项目自动化发布遇到的坑

    之前我们研究dep,就是为了有一天可以实现go语言项目在我们系统里的CI. 之前联物科技的项目主要是使用java作为后端开发语言,基于jenkins的自动发布,使用了pipeline编写脚本,从拉取代 ...

  6. swoole mysql 连接池_基于Swoole的通用连接池 - 数据库连接池

    连接池 open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖 版本 >=7.0.0 >=4.2.9 Recommend ...

  7. 基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

    作者 | 刘春明,责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图 | CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用 ...

  8. 基于Jenkins 快速搭建持续集成环境

    2019独角兽企业重金招聘Python工程师标准>>> 持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开 ...

  9. 38.DevOps之基于Jenkins实现的CI与CD

    文章目录 一 DevOps 简介 1.1 什么是 DevOps 1.2 为什么要推广 DevOps? 1.3 传统技术团队 1.4 DevOps 技术团队 1.5 什么是持续集成(CI-Continu ...

最新文章

  1. python 递归 分叉_浅谈Python 递归算法指归
  2. 函数onsize()与onsizing()区别
  3. 2021暑假生产实习【SSM实习项目-超市积分管理系统】博客汇总表
  4. 去掉左边0_SLAM从0到1——11. 视觉里程计VO内容框架
  5. ai驱动数据安全治理_AI驱动的Web数据收集解决方案的新起点
  6. C++:09---类静态成员、类常量成员
  7. 中职计算机高考总分是多少,高考理科总分是多少分
  8. 人生---新---起点……
  9. C4996 'sprintf': This function or variable may be unsafe.
  10. iOS视频播放器开发
  11. 计算机装配方案之游戏发烧型,5000元Intel八代i5-8500配RX580电脑配置 畅玩各类中大型游戏...
  12. 华为手机USB调试与Log
  13. TransBigData 针对交通时空大数据处理的Python包
  14. 华三防火墙h3cf100配置双宽带_华三防火墙H3 F100基本配置说明.doc
  15. 【2021 ICPC Gran Premio de Mexico 2da Fecha F】Flipped Factorization 题解
  16. 手机 9006 端口 不断的闪掉
  17. PB处理BLOB类型的方法
  18. 线程学习基础(1):单线程爬虫和多线程爬虫的效率比照
  19. Mysql数据库服务
  20. 网络功能虚拟化NFV

热门文章

  1. python719全套教程_喜马拉雅页面网络爬虫(Python)
  2. QListwidget设置水平滚动条和竖直滚动条
  3. OBS录制全屏游戏的方法(超好录屏)
  4. 一键部署建站环境LNMP
  5. 华科大考研计算机系834大纲之计算机网络(六)
  6. 指针-老生常谈 又是 常谈常新的话题
  7. Android 蓝牙驱动专题分析(1)--- 蓝牙驱动代码流程、kernel dump、tombstone问题分析
  8. thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析
  9. 使用Arduino开发ESP32(二十九):WiFismartconfig,一键配网,又名快连
  10. 白泽六足机器人_arduino_v1——零件准备