企业级CICD/效能平台的设计与实现

背景简介

我们知道在企业级产品开发的流程中CI、CD能极大的提高我们的产品发布效率。本篇文章将从真实企业环境出发,介绍CI、CD平台的设计到落地实现。该项目旨意提高企业交付速度

需求内容

  • 应用标准化:提供新建标准化应用的接口,运行脚本创建应用基本结构,提供必要配置。
  • 角色管理:针对不同角色分配不同操作权限,超级管理员,项目组长,开发测试人员。
  • 流水线:研发流程以可视化方式呈现,编译、测试、部署;支持节点重启,支持开发测试生产分支。
  • 代码检查:检查缺陷、安全漏洞、规范等多种维度代码问题,为产品质量保驾护航。
  • 代码库:将企业内已有的代码托管服务(支持私服和公有云)
  • 凭证管理:为代码库、流水线等服务提供不同类型的凭据、证书管理功能
  • 基建管理:可以接入各类中间件(es、dubbo、kafka、redis)进行基本操作.

业务流程

在CICD的流程中主要分为以下几个节点
详细流程图

技术选型

首先我们需要结合企业的实际环境来设定,如项目组件数量是否庞大、组件之间的通信方式是什么、是否有自己机房等。

代码库

不强依赖某个代码库,只需要在配置应用的时候让系统拿到访问代码库的权限即可。

持续集成

Jenkins作为业界的标准,拥有的插件极其丰富,相比Travis-CI、Gitlab CI更加灵活,在设计中我们采用它来处理cicd过程中的部分自动化工作。

代码审计

代码审计标准配置为Gerrit+Jenkins+Sonar,整个系统搭建完成后得到的效果为:100% Code Style问题避免入库,80% 设计问题避免入库,40% 逻辑错误避免入库,20% 安全隐患避免入库,100% 人员互备

镜像存储

ceph/harbor

资源分配

服务环境资源的动态分配可以采用k8s进行分配,通过Java Client API调用,具体参考文末链接

总体设计

系统架构图

详细设计

模型图

权限模块详细设计

基于JWT结合spirng security来实现基础操作权限控制

模型图
领域图

序列图

领域事件

应用模块详细设计

提供新建标准化应用的接口,运行脚本创建应用基本结构,提供必要配置。在平台创建应用需要关联对应的代码库。

标准化应用地址:TODO

角色管理详细设计

针对不同角色分配不同操作权限,超级管理员,项目组长,开发测试人员。

流水线详细设计

研发流程以可视化方式呈现,编译、测试、部署;支持节点重启,支持开发测试生产分支。

流水线前端参考相关画布的实现,文末尾有

代码检查详细设计

检查缺陷、安全漏洞、规范等多种维度代码问题,为产品质量保驾护航。

代码库详细设计

将企业内已有的代码托管服务(支持私服和公有云)

凭证管理详细设计

为代码库、流水线等服务提供不同类型的凭据、证书管理功能

K8S模块详细设计

提供k8s环境管理功能,监控,回滚等操作

基建模块详细设计

可以接入各类中间件(es、dubbo、kafka、redis)进行基本操作.

安装流程

系统的安装流程
1.初始数据库脚本,部署并启动cicd-platform
2.通过平台引导搭建并初始化k8s集群
3.引导初始化Jenkins集群、开发环境、测试环境、预发环境、生产环境

修改为
1.通过提供的脚本创建master k8s集群并部署cicd-platform
2.在cicd-platform平台上添加机器节点
3.在cicd-platform平台上引导初始化Jenkins集群、开发环境、测试环境、预发环境、生产环境

参考资料

前端代码库:https://github.com/ken-xue/cicd-platform-vue
后端代码库:https://github.com/ken-xue/cicd-platform

代码扫描:sonar https://docs.sonarqube.org/latest/setup/install-server/
Gerrit 代码评审工具:https://www.gerritcodereview.com/
https://www.sonarqube.org/

Docker:https://www.docker.com/
k8s:https://www.kubernetes.org.cn/k8s
bk-ci: https://gitee.com/Tencent-BlueKing/bk-ci/tree/master
k8s Java Client : https://github.com/kubernetes-client/java
kubesphere: https://github.com/kubesphere/kubesphere/blob/master/README_zh.md
kubeoperator: https://gitee.com/fit2cloud-feizhiyun/KubeOperator
https://demo.kubeoperator.io/#/clusters
二进制安装k8s集群(1.21.2),多主多从:https://www.jianshu.com/p/b02c428950df
三分钟安装一个k8s集群:https://github.com/fanux/sealos

脚本一键安装k8s: https://github.com/lework/kainstall

tekton:
https://tekton.dev/
https://github.com/tektoncd

harbor:
https://goharbor.io/docs/2.4.0/install-config/

rancher:https://rancher.com/

流水线画布:https://gitee.com/junweizhou/vue-flow-draggable
https://docs.jsplumbtoolkit.com/toolkit/5.x/

ansible: https://docs.ansible.com/

Jenkins:https://www.jenkins.io/zh/doc/#doc/book/getting-started#
Jenkins java client:https://github.com/jenkinsci/java-client-api

交互:jsch
模拟终端:xterm https://xtermjs.org/docs/

cloud ide:https://theia-ide.org/docs/blueprint_download


企业级CICD/效能平台的设计与实现
https://mikeygithub.github.io/2021/04/27/yuque/企业级CICD!效能平台的设计与实现/
作者
Mikey
发布于
2021年4月27日
许可协议