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

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
cicd 08--基于Jenkins的通用可扩展CICD架构_第1张图片

2.2 主要模块功能

此处列举一些常用的底层job, 后续会在此处新增底层基础job, 需要确保这些job可复用.

  1. Clone 代码
    英文名称: base_clone_code
    功能说明: clone 代码到指定目录
    参数说明: 
      node: clone 代码所用的Jenkins agent label
      git_repo_url: 代码仓库的url
      branch: 代码对应的分支
      target_path: 代码clone的目标路径
    其它: 
    
  2. 同一机器拷贝文件
    英文名称: base_cp_file
    功能说明: 在同一个机器上拷贝文件()
    参数说明:
      node: 执行拷贝操作的Jenkins agent label
      src_file: 原文件()路径
      des_file: 目标文件()路径
    其它: 
    
  3. 远程机器拷贝文件
    英文名称: base_rsync_file
    功能说明: 将本机的文件()拷贝到远程机器上
    参数说明:
      node:  执行拷贝操作的Jenkins agent label
      src_file: 原文件()路径 
      des_host_info: 目标机器的信息,格式为 user_name@des_server_ip
      des_file: 目标文件()路径
    其它: 
      需要提前配置机器 rsyncssh 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 如下所示:
cicd 08--基于Jenkins的通用可扩展CICD架构_第2张图片

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 执行结果

主流程执行完成
cicd 08--基于Jenkins的通用可扩展CICD架构_第3张图片

主流程触发 job-a 执行完成任务
cicd 08--基于Jenkins的通用可扩展CICD架构_第4张图片

主流程触发 job-b 执行完成任务
cicd 08--基于Jenkins的通用可扩展CICD架构_第5张图片

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

你可能感兴趣的:(Devops,jenkins,可扩展CICD架构,CICD架构,持续集成交付,可配置流水线)