【云原生-DevOps】企业级DevOps平台搭建及技术选型-CICD篇

article/2025/9/22 10:22:21

又是开篇

  • 上一篇文章我们大概分享了DevOps项目管理中怎么企业级搭建
  • 本篇文章主要介绍两个子系统【CICD、效能看板】

CICD系统

在这里插入图片描述

  • CI(Continuous Integration):指持续集成,它属于开发人员的自动化流程。
  • 持续集成是一种软件开发实践,团队开发成员经常提交代码到代码仓库,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成,且每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误,从而使问题尽早解决。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。虽然持续集成无法消除bug,但却能大大降低修复bug的难度和时间。
  • CD(Continuous Delivery):指的是持续交付和/或持续部署
  • 通过持续交付,其软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。通过持续交付,可以决定每天,每周,每两周发布一次,这完全可以根据自己的业务进行设置。
    在这里插入图片描述
  • 清晰cicd流程图:https://www.processon.com/view/link/63536f66e0b34d081671f08d

CICD开源组件

GitLab【代码仓库】

  • 通过细粒度的访问控制来管理Git存储库,确保您的代码安全。执行代码审查并通过合并请求的实现更紧密的开发协作。每个项目还可以配置议题跟踪和wiki。
  • 官网:https://about.gitlab.com/
  • 企业版本:https://gitlab.cn/
  • Rest API:https://www.apifox.cn/web/project/406098/

docker

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  • 官网:https://www.docker.com/
  • 官网仓库:https://hub.docker.com/

Kubernetes (K8s)【部署】

  • kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  • 官网:https://kubernetes.io/zh-cn/
  • 开源地址:https://github.com/kubernetes/kubernetes
Kubesphere
  • KubeSphere 愿景是打造一个以 Kubernetes 为内核的 云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。 KubeSphere 也是一个多租户容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流
  • 官网:https://kubesphere.io/
  • 开源地址:https://github.com/kubesphere/kubesphere
Rancher
  • Rancher 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个Kubernetes集群的运营和安全挑战,并为DevOps团队提供用于运行容器化工作负载的集成工具。
  • 官网:https://www.rancher.cn/
  • 开源地址:https://github.com/rancher/rancher

构建打包流水线【Jenkins】

  • Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
  • 官网:https://www.jenkins.io/zh/
  • 开源地址:https://github.com/jenkinsci/jenkins

代码扫描【SonarQube 】

  • SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题, 并通过SonarQube web UI展示出来。
  • 官网:https://www.sonarqube.org/
  • 开源地址:https://github.com/SonarSource/sonarqube

镜像仓库【Harbor】

  • Harbor 是一个开源注册表,它使用策略和基于角色的访问控制来保护工件,确保图像被扫描并且没有漏洞,并将图像标记为可信。Harbor 是一个 CNCF 毕业项目,它提供合规性、性能和互操作性,以帮助您跨云原生计算平台(如 Kubernetes 和 Docker)一致且安全地管理工件。
  • 官网:https://goharbor.io/
  • 开源地址:添加链接描述

自动化运维【ansible】

  • ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可
  • 官网:https://www.ansible.com/
  • 开源地址:https://github.com/ansible/ansible

单点登录【casdoor】

  • 支持 OAuth 2.0、OIDC 和 SAML 的 UI 优先集中式身份验证/单点登录 (SSO) 平台,与 Casbin RBAC 和 ABAC 权限管理集成。
  • 官网:https://casdoor.org/zh/
  • 开源地址:https://github.com/casdoor/casdoor

功能列表

凭证管理

Git凭证
  • 支持Git凭证的增删改查,可以支持Git多种授权方式
  • 用户名密码授权、密钥授权、项目令牌授权
    在这里插入图片描述
  • 有了凭证管理过后后续在拉取代码的时候会用到进行鉴权
Docker Harbor 仓库凭证
  • 主要采用用户名密码的形式进行存储,在后续进行构建完成后把镜像包上传到Harbor仓库上面
  • 为了方便不同项目不用每个都开启一个Harbor账号,可以由CICD平台统一开起一个默认的Harbor账号初始化进项目中
  • PS:无论是Git账号、Docker Harbor账号在持久化存储的时间,都必须镜像密码加密存储,加密方式参考:
  • https://blog.csdn.net/u010800804/article/details/118708711
代码源管理
  • 在CICD系统中,需要用到源代码授权,在获取源代码的情况进行然后进行不同开发语言进行打包
  • 使用统一代码仓库作为代码源,将从您在平台对应的GitLab个人账号下选择一个自己的代码仓库,在CI/CD系统中的当前项目内进行共享。
  • 表示代码源添加后,本项目内的所有成员都可以在构建任务、单元测试中使用该代码仓库作为自己的代码源,同时不需要配置其他鉴权信息就可以在任务执行过程中下载到该代码仓库的代码。
  • 如后续使用中需要取消共享,您可以在代码源中移除自己添加的代码仓库,但移除后可能会导致依赖的任务无法执行。
    在这里插入图片描述
  • 在这里会用到远程调用Gitlab【或者其他代码仓库管理平台】API,进行当前用户账号有权限的代码和公共的代码仓库,当然可以进行搜索。
  • 在上面讲到的凭证管理,推荐大家使用项目token的方式
  • 在Gitlab进行token权限设置,只给只读权限,因为CICD平台只会拉取代码进行构建产物,不会对源代码镜像修改和提交,当然防止别有用心之人对其进行修改。
    在这里插入图片描述
    在这里插入图片描述

基础设置

角色管理
  • 支持自定义角色,可以给自定义角色划分相应的增删改查权限【如流水线、构建权限等】
成员管理
  • 支持管理员主动从用户中心进行人员同步
  • 在外层公共的地方也支持用户主动进行申请,然后项目管理员进行审核
    在这里插入图片描述

构建管理

基本信息
  • 构建的名字、构建的添加时间、构建的其他基础信息【如是否禁用等字段】
    在这里插入图片描述
选择代码源
  • 构建的时候是否是固定分支、出发的方式又是什么【如手动构建、Webhook的方式构建】可以进行编辑及选择
    在这里插入图片描述
构建步骤
  • 进行常用的代码进行做成模板进行构建【如Java构建、Golang构建、NPM构建等】,或者自定义命令介绍。
    在这里插入图片描述
  • 使用封装好的Java代码编译环境(如Maven、JDK),以docker run的方式启动一个临时的容器进行构建。【这会编译在Jenkins脚本中】
  • 构建的时候传入凭证、构建信息等,调用Jenkins的API进行调用。
    在这里插入图片描述
  • Dcoker进行镜像构建,输入相应的参数
    在这里插入图片描述
  • 通过“docker build”和“docker push”把构建结果以镜像方式进行交付至镜像仓库。
  • docker build的Context为代码根目录,注意Dockerfile中的相对路径要以根目录为参考。

环境管理

K8S公共集群
  • 可以使用在公司资源池创建的K8S集群创建环境,也可以使用其他外部云服务商的集群创建环境(前提是能够正常访问到K8S的API)。
  • 不同的K8S环境可以使用相同的K8S集群,但必须通过不同的namespace加以区分。
    在这里插入图片描述
K8S私有集群
  • 一般在生产环境下,不同部门使用的是不同的K8S集群,甚至运维也是不同的人在运维,所以一个公司会有很多个生产集群供不同项目选择使用,但是开发环境、测试环境可以统一使用一个公共大集群,方便大家统一环境,快速构建测试生产环境。
  • 私有K8S集群接入主要依赖Config.yml,进入导入,然后调用K8S SDK进行环境校验接入。
    在这里插入图片描述

部署管理

基本信息
  • 写入部署基本信息,如名称、部署的环境、镜像地址、Docker仓库鉴权选择等
    在这里插入图片描述
部署配置
  • 部署配置,主要就是把K8S的常用信息,如Deployment、ConfiMap、服务暴露等信息进行可视化页面操作。

  • Deployment在K8S中就是最主要的,主要包含多个Pod,如最大最小内存、最大最小CPU限制,这样设置后也会保护我们的主机
    在这里插入图片描述
    在这里插入图片描述

  • ConfigMap

  • ConfigMap是K8S中可用于存储配置信息的一种资源对象,

  • 您可以在此处上传应用在该环境运行时需要的配置文件,

  • 部署任务执行时对这些文件将以ConfigMap的方式挂载到应用容器中指定的目录下。

  • 服务暴露:Service

  • K8S的Service主要分两种,ClusterIP和Nodeport。

  • ClusterIP仅能在K8S集群内部通过 [内部访问地址] 访问。

  • NodePort除了支持内部访问外,还可以通过K8S任一节点IP及映射的端口号进行访问。
    在这里插入图片描述

  • 服务暴露:Ingress

  • Ingress相当于K8S集群的流量入口(后端通过Nginx实现),根据Host和Path判断把流量分发到具体的后端应用。

  • 填写的Host不会自动解析到K8S集群入口,需要用户自行解析到集群任一节点的IP。

  • Ingress仅支持以HTTP协议提供服务的应用从K8S外部访问,访问端口号一律是80。

  • 服务暴露:GRPC Ingress

  • GRPC Ingress用于代理GRPC类型的服务。

  • 如果调用者与GRPC服务在同一个K8S集群中,可直接通过列表中的访问地址进行访问,无须加端口。

  • 如果调用者与GRPC服务不在用一个K8S集群中,则访问者需要绑Hosts,域名为访问地址。
    在这里插入图片描述

应用管理
  • 支持查看Pod实例
    在这里插入图片描述
  • 支持K8S在线扩缩容等操作,查看K8S Deployment描述文件等。

流水线管理

  • 企业级持续集成和持续交付工具,通过构建自动化、集成自动化、验证自动化、部署自动化,完成从开发到上线CICD过程。通过持续向团队提供及时反馈,让交付过程高效顺畅。
    在这里插入图片描述
  • 最佳实践
  • 我们在实际应用的过程中,通常把我们的单元测试、代码扫描等,构建,部署统一添加到一个流水线中,然后当代码提交时,出发WebHook进行出发流水线。
基本信息

在这里插入图片描述

工作流
  • 构建: 支持以Docker镜像的方式封装测试所需的运行环境,然后执行自定义的测试过程,在工作流程进入交付环节之前保证代码达到必要的质量。
  • 部署: 结合实际的软件发布流程,以已有的应用部署任务为核心。
  • 单元测试: 使用已有的测试任务为持续交付流程提供测试功能。
  • 卡点操作: 可通过卡点实现流水线执行过程的人工审核机制,也可以在卡点阶段执行外部依赖操作,提高流程的合理性。
  • 代码扫描: 通过HTTP方式调用外部接口,实现CICD工作流与外部能力快速集成。
    在这里插入图片描述

效能看板

  • 效能看板一款专业的交付过程观测和研发效能度量分析工具,从计划、执行、风险等 6 个方面度量交付过程、暴露交付风险、保障交付效率和质量,通过流动效率、资源效率、质量保障 3 个维度可视化团队效能状态、深入分析问题、精准指导效能改进。

整体说明

  • 前面我们用到了很多的开源组件:如Gitlab、禅道、Jenkins等
  • 是一整套完整的DevOps工具链,我们也参数了很多的数据集
  • 当然领导最喜欢的就是看报表、看板、我们可以根据不同公司、不同维度、进行指标库统一创建、然后进行不同部门不同指标自定义展示。

功能描述

项目交付过程度量

  • 度量项目的交付过程,跟进计划和执行,及时发现问题和偏差
  • 帮助管理者保障项目交付的规范、效率和质量

团队资源可视化

  • 可视化团队资源规划,即时反映团队中人力的分配、工作负荷和产出效率
  • 帮助管理者精准调配人力、优化资源配置,并客观评价资源产出能力,有针对地提升组织效能

研发效能度量和分析

  • 基于专业的效能模型,客观评价团队效能状态,分析效能问题
  • 让效能状态一目了然,改进有据可依,改进结果可量化

权威的研发效能度量解读

  • 为各个报表和度量指标提供系统的解读,帮助团队深入理解度量指标含义和使用方法
  • 面向各个场景,提供度量方案设计建议,提升方案的可行性和落地效果

写完啦

  • CICD篇算是告一段落啦,过程中,只描述了大概的一些信息,细节方面都没有详细列出,毕竟DevOps不是三言两语就能很好的概括的,只是在这里写了一个大致的方向,供大家参考。
  • 企业级DevOps平台搭建及技术选型-项目管理篇
  • https://rundreams.blog.csdn.net/article/details/127451055

当然如有问题沟通,也可以私信与我交流,谢谢。


http://chatgpt.dhexx.cn/article/eH2tRKsr.shtml

相关文章

CICD和K8S实战

部署流程 拉取镜像,用docker 部署harbor镜像仓库 harbor是一个docker私有镜像仓库。 1、创建项目 2、创建成员 3、为项目添加成员。 后续是jenkins往harbor上传镜像,所以还需要一台jenkins服务器。 向harbor上传镜像 业务服务器 用来最终测试cd的结果。…

CICD构建实验

CICD CICD是一个可以集部署、拉取、上传等于一体的架构环境,它支持一线进行部署,免去了人工一条条的进行部署环境的工作流程,大大降低了人力手工运维成本和出错率。 CICD的搭建需要至少三台服务器,他们分别监管着Harbor&#xff…

请问什么是 CICD

CI,Continuous Integration,持续集成。CD,Continuous Deployment,持续部署。CICD 一般合称,无需特意区分二者区别。从开发、测试到上线的过程中,借助于 CICD 进行一些自动化处理,保障项目质量。 CICD 与 git 集成在一起,可理解为服务器端的 git hooks: 当代码 push 到…

企业级生产环境CICD入门

代码上线方案 部署代码,就是把程序包,传到linux服务器上,然后运行。 以前都是手动上传。 合理化上线方案 上线之前需要备份。 大型企业上线制度和流程 代码上线解决方案注意事项 持续集成,持续交付,持续部署&#…

前端搭建CICD流程

用Docker-compose 安装gitlab、gitlab-runner 源码地址 如果您觉得有用请STAR 安装docker 如果有已安装旧版docker需要先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docke…

搭建CICD平台

** 搭建CICD平台 ** 1、主机准备。 2、安装前预配置。准备相应的系统配置与软件依赖。 3、执行安装。 4、安装后配置。添加相应的组件以及修改配置。如导入模板等。 一、主机准备 Centos7.2 配置:内存大于4G。(其中Jenkins占1.5G、Gitlab占2G&#xf…

什么是CICD

什么是CICD 一、简介二、持续集成(CI)三、持续交付(CD)四、持续部署(CD)五、下一步是什么? 一、简介 CI / CD的采用改变了开发人员和测试人员如何发布软件。 最初是瀑布模型,后来是…

CI/CD是什么

文章目录 前言CI/CD概念持续集成(Continuous integration,CI)持续交付(Continuous Delivery,CD)持续部署(Continuous Deployment,CD)CI/CD小结 CI/CD 工具CI/CD 配置文件…

CICD简介

简介 CICD 是 持续集成(Continuous Integration)持续交付和持续部署(Continuous Deployment)简称。指在开发过程中自动执行一系列从开发到部署的过程中,尽量减少人工的介入。 CI 持续集成 ​ 定义:频繁…

都在说CI/CD,到底什么是CI/CD

引入 这篇文章是自己工作多年对CI/CD的理解,纯属个人见解。 不想说太多概念性的东西,直接从技术人员实际能接触的过程来展开说说。另外我这篇只是想关注一些通用的流程,细节的不同这里不纠结。比如微服务的CI/CD和单体服务有些不同&#xf…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成(Continuous Integration,CI)和持续发布&#xff0…

什么是 CI/CD ?

说在开头 CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI全称 Continuous Integration,表示持续集成,CD包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖…

【神经网络】一文读懂LSTM神经网络

简介 说到LSTM神经网络,大家都不陌生,LSTM指的是Long Short-Term Memory,意思是:长短时记忆,也就是说这个神经网络有记忆功能,为什么说它有记忆功能呢?因为在训练数据的时候,很久之前…

深度学习中的循环神经网络LSTM详解

(一)、什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果…

【神经网络】学习笔记三—LSTM简介篇

1. RNN和LSTM结构对比 RNN: 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不…

深度学习-LSTM网络-代码-示例

一、 LSTM网络原理 要点介绍 (1)LSTM网络用来处理带“序列”(sequence)性质的数据,比如时间序列的数据,像每天的股价走势情况,机械振动信号的时域波形,以及类似于自然语言这种本身带有顺序性质的由有序单…

LSTM模型介绍

递归神经网络(RNN) 人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不会忘掉掉所有东西,然后再从头开始思考。 你的想法有持久性。 传统的神经网络不能做到这一点,…

人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]

0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask。本文属于作者一边学习一边翻译的作品,所以在用词、理论方面难免会出现很多错误,假如您发现错误或者不合适…

LSTM神经网络算法

RNN RNN 是包含循环的网络,允许信息的持久化。 在下面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。 RNN 可以被看做是同一神经网络的多次复制&…

Understanding LSTM Networks(LSTM的网络结构)

Recurrent Neural Networks 人类不是每时每刻都从头开始思考的。当你读这篇文章的时候,你理解每个单词是基于你对以前单词的理解。你不会把所有的东西都扔掉,然后从头开始思考。你的思想有毅力。传统的神经网络无法做到这一点,这似乎是一个主…