企业级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/