持续集成流程主要系统构成介绍(CI)

目录

一、概述

二、版本控制系统

2.1 概述

2.2 版本控制系统使用流程示意图

2.3 版本控制软件划分

2.3.1 集中式版本控制软件

2.3.2 分布式版本控制软件

2.3.3 总结

2.4 常用版本控制软件介绍

三、编译构建系统

3.1 概述

3.2 编译构建流程示意图

3.3 列举Java 源码编译构建流程

3.3.1 Java代码编译构建流程示意图

3.4 持续集成产品架构分层

3.4.1 持续集成产品架构分层示意图

3.5 常见编译工具列举

四、编排调度系统

4.1 概述

4.2 编排调度系统示意图

4.3 编排调度系统构成内容解析

4.3.1 任务

4.3.2 编排

4.3.3 调度

4.4 编排调度软件举例

4.5 编排调度系统的核心功能

4.5.1 流程编排管理

4.5.2 任务配置管理

4.5.3 作业调度管理

4.5.4 历史日志管理

五、其他系统

5.1 概述

5.2 企业配置管理数据库(CMDB)

5.3 资源管理系统

5.4 制品仓库

5.5 总结


一、概述

了解了持续集成和版本控制的基本概念之后,下面带大家从技术层面深入理解其具体内容。一个标准的持续集成功能通过平台来实现时,它至少包含如下三个部分:

  • 版本控制系统。
  • 编译构建系统。
  • 编排调度系统。

二、版本控制系统

2.1 概述

版本控制系统通常是由版本控制软件和仓库管理软件两部分组成,即业界常说的SCM软件。版本控制软件用来管理代码和项目文件(如SVN),仓库管理软件则基于版本控制软件之上对代码仓库进行管理(如SVNManager)。

2.2 版本控制系统使用流程示意图

在持续集成流程中,版本控制系统承载的操作流程如下图所示。

2.3 版本控制软件划分

根据版本控制管理的方式不同,当前市场上的版本控制软件可划分为集中型版本控制软件和分布式版本控制软件。集中式版本控制软件以SVN为代表,分布式版本控制软件以Git为代表。

2.3.1 集中式版本控制软件

在集中式版本控制软件中,代码集中存储在某台服务器上。项目人员使用时,需要先安装客户端软件,连接到版本控制软件的服务器端,将代码检出到本地,修改后再从自己的计算机同步更新或上传到服务器,如下图所示:

集中式版本控制软件的特点是所有的版本数据都保存在服务器端,项目人员在本地计算机中仅保存着自己以前同步的版本。在不连接服务器端的情况下,项目人员就看不到服务器上的历史版本信息。如果项目人员想切换到某个版本,也无法操作。除此之外,集中式版本控制软件最大的风险是所有数据都保存在单一服务器上,如果服务器受到损害,则有版本丢失的风险。为此,需要定期做数据备份。当然,也正是这种集中式、单一的管理方式,其使用比较简单,尤其对新手来说,很容易上手。

2.3.2 分布式版本控制软件

相比于集中式版本控制软件,分布式版本控制软件的使用相对复杂。项目人员在初次使用时,必须在本地计算机上克隆(git clone)一个完整的Git仓库,再基于这个本地仓库进行检入检出操作。再将本地仓库与服务器端仓库进行数据同步,从而完成版本控制管理的目的。如下图所示。

分布式版本控制软件对文件的修改通常以快照的方式记录版本差异。当本地仓库完成克隆之后,除非同步数据到服务器端,其他的操作都是在本地执行,无需联网。这对于网络环境相对封闭的项目组来说,多人协同开发版本管理比较方便。在分布式版本控制软件,中央仓库所在的服务器或版本控制软件的服务器端充当交换媒介的作用,将项目组中不同人员的修改进行交换,由修订人员在本地仓库间进行互相复制。同时,每个人的本地仓库都保存一份完整的版本库。

2.3.3 总结

从上述的这些特点来看,分布式版本控制软件的管理过程比集中式版本控制软件要复杂,但好处较为明显。目前在大中型企业管理中,分布式版本控制软件的使用占比高于集中式版本控制软件,分布式版本控制软件更适用于大规模的多人协作开发。

2.4 常用版本控制软件介绍

为了帮助大家在搭建DevSecOps平台时,选择契合业务实际需求的版本控制软件,下面介绍下常见的版本控制软件,如下图所示:

三、编译构建系统

3.1 概述

编译构建是源代码转为可执行程序过程中必不可少的一个步骤,在传统的开发模型中,编译构建通常是开发人员在本地计算机自己编译后上传版本库;在持续集成流程中,编译构建动作通常是平台上的持续集成工具来自动化完成的。除了基本的代码编译构建外,还有容器镜像的构建

3.2 编译构建流程示意图

当开发人员提交代码之后,触发持续集成平台中的编排调度系统发起调度流程执行编译构建动作。编译构建系统会根据不同的编程语言选择不同的编译工具将源码进行编译打包成制品。如果制品还需要制作成容器镜像,则继续调用镜像构建流程。

3.3 列举Java 源码编译构建流程

3.3.1 Java代码编译构建流程示意图

下面以Java语言的源代码为例,介绍代码编译构建过程,如下图所示:

当编译构建系统执行编译指令时,编译工具的编译引擎先解析编译配置文件,根据配置文件中的配置从中央仓库或本地缓存中获取版本所需要的依赖库,再对源代码进行编译,执行编译过程如果编译没有发生阻断性错误,则最终输出编译产物,即可执行程序或制品包。当有新的版本迭代时,重新触发上述流程,持续编译输出编译产物。

当代码编译构建完成打包成制品后,如果没有使用镜像,则流程结束;如果有镜像制作,则触发镜像构建流程,如下图所示:

在整个流程中,编排调度系统充当流程管理员的作用,通过不同的指令,将代码下载、依赖下载、应用制品打包、镜像制作的流程串联起来,形成持续集成管道化的功能

3.4 持续集成产品架构分层

3.4.1 持续集成产品架构分层示意图

从这些流程可以看出,不同的开源产品在持续集成平台架构中分别承担不同的功能。如果将这些开源产品进行系统分层,则结果如下图所示:

上图中,持续集成工具即编排调度层充当持续集成流程的管理中枢,并直接面向最终用户;编译工具层提供各种不同的开发语言编译工具,承上启下,连接编排调度层和基础代码仓库;而基础数据层则为上层的编译构建操作提供原始的源代码及代码管理功能。

3.5 常见编译工具列举

因开发语言、运行环境的不同,编译工具也各不相同。常见的编译工具如下图所示:

四、编排调度系统

4.1 概述

介绍完编译构建系统,再来看看编排调度系统。编排调度系统充当了代码编译、构建镜像、通知推送几个步骤的综合管理和调度工具,这就是编排调度系统的核心使用场景。

4.2 编排调度系统示意图

如果把代码编译、构建镜像、通知推送看成3个独立的任务,编排调度系统是调度中心,这就是编排调度系统的核心能力构成:任务、编排、调度。

4.3 编排调度系统构成内容解析

4.3.1 任务

在前文提及持续集成流程时,我们了解到整个流程是一个个动作串联起来的,这一个个的动作可以当作一个个具体的执行任务。体系在平台中,则需要完成任务所支撑的代码片段,这些代码片段能完成具体功能,如代码提交、代码安全的自动化检查、单元测试用例的覆盖度检查等。这些,在平台中统一称之为任务。

4.3.2 编排

编排是指不同的任务之间,通过一定的排列组合、先后顺序的承接,来完成一个整体的作业流程。进行排列组合和组装顺序的过程称之为编排,编排后的整体流程称之为作业。例如,代码提交后,接着执行单元测试用例覆盖度的检查,再执行代码缺陷的自动化检查;也可以代码提交后,先执行代码安全的自动化检查,最后执行单元测试用例覆盖度的检查;还可以设置多次代码提交,但不触发代码安全的检查,只有当代码编译构建通过后,再触发代码安全的自动化检查,这个流程中,代码提交的任务被触发了多次。这也是编排的一种。总之,编排就是通过不同的组合方式,来完成任务执行顺序关系的设置,以满足业务的需要。

4.3.3 调度

调度是指在不同的任务执行过程中,需要分布跟踪、调度任务的执行及执行情况,以根据上一步执行结果调用不同的下一步任务的过程。例如,代码编译后执行代码缺陷检查任务,如果代码缺陷检查调用不成功,则切换编译环境,再次执行代码编译、代码缺陷检查任务。这个流程的控制称为调度。调度通常关注任务执行的结果,被调用方常常是跨子系统的。

4.4 编排调度软件举例

目前,常用的编排调度软件(即持续集成工具)如表所示:

在知道了常见的持续集成编排调度软件,了解了编排调度的基本概念之后,大家也基本明白为什么在DevSecOps平台中需要编排调度系统。如果没有编排调度系统,不同的流程无法统一用平台来管理,不同的任务无法在平台中进行统一配置,DevSecOps规范中设置的安全卡点也就无法在平台中完成线上业务的承载

4.5 编排调度系统的核心功能

既然编排调度如此重要,那么编排调度系统中,到底包含哪些核心功能呢?

4.5.1 流程编排管理

流程编排管理是编排调度系统中的首要功能,每一个流程编排运行时产生一个流程实例,任务是此持续集成流程中最小的集成单元。对于整个流程来说,它是由一个一个的任务组合在一起形成的,为了完成这些不同任务的组合作业,在DevSecOps平台中,需要有任务编排管理的功能来形成流程。任务编排功能页面如下图所示:

如图所示,用户在编排时,可以在不同的阶段添加不同的任务。例如,在构建阶段添加对SCA的调用,检测开源组件安全漏洞;开发提测前,添加必须通过静态代码安全检测的任务等。当任务编排完成后即形成一个可以执行的具体作业,作业的完成依赖于其中每个任务的执行完成情况。一个标准的作业流程就是一次流水线管道的执行。在作业的实际执行过程中,不一定每一个任务都会执行到,有可能存在某个任务出现异常或被跳过的情况。如果某个任务中包含子任务或其他并行任务,则需要对子任务或并行任务进行配置管理,以保障作业流程的顺利执行,这也是任务编排管理的内容。

4.5.2 任务配置管理

在任务配置管理中,需要管理单个任务执行的基本参数,如开始条件、执行次数、调用脚本或脚本路径、相关参数配置等,这是任务配置管理的基本功能。除此之外,当某个任务执行存在多个入口或者多个出口时,也需要任务的路由策略进行配置管理。在某些企业,因任务的种类繁杂(如API接口类任务、bash脚本类任务、操作系统命令行类任务、数据操作类任务等),平台设计时会抽象出一个适配层去适配各种不同的任务执行环境,这也是任务配置管理的内容。典型的任务配置管理页面截图如下图所示:

对单个任务而言,一般都承担着流程中的某个具体的动作,如代码扫描、编译检查。除此之外,还有一些任务节点在整个流程不承担具体的动作,类似流程图上的开始、结束节点,但对于整个流程来说,这些节点也是不可或缺的。这类节点的任务配置也需要任务配置管理来实现,不同的是,这些任务配置可以标准化或模板化,以方便平台用户的使用。

4.5.3 作业调度管理

任务通过编排形成作业之后,进入作业调度管理。通过作业调度管理作业的启动、流转和结束。当多个作业同时执行时,需要管理不同作业之间的优先级,为优先级高的作业提高资源保障,这是调度管理的基本功能。很多时候,多个任务之间有着强依赖关系,如只有前置任务执行完成,才可以启动当前任务。这时对前置任务执行状态的监控和当前任务的拉起都离不开作业调度管理。同时,在作业流程的执行中,对任务节点的执行情况进行监控,当任务节点的状态发生变化时,及时跟进作业流程的状态。如果缺少了作业调度,则任务无法执行或执行混乱;如果作业流程缺少监控,则无法跟踪作业流程的执行状态,对于执行异常的任务也无法发现,及时干预和处置。基于任务监控功能之上的异常告警、任务重发、异常处理等都是作业调度系统中必不可少的功能模块。

4.5.4 历史日志管理

操作日志是每一个信息化系统必不可少的功能,在编排调度系统中,历史日志管理尤为重要。在前文中曾提及,编排调度的最小单元是一个个的任务,这些任务相互之间是独立的,通过流程串联、接口调用将它们联合在一起。这种跨模块、跨系统的调用,如果没有历史日志将是很糟糕的事。通过历史日志可以还原流程执行中任务的执行顺序、单个任务执行的过程详情、异常故障的原因分析、历史流程的归纳统计等

五、其他系统

5.1 概述

除了上述三个系统外,在持续集成流程中还有一些其他的周边系统参与整个流程的协作中,典型的如企业配置管理数据库(CMDB)、资源管理系统、制品仓库等。

5.2 企业配置管理数据库(CMDB)

CMDB主要是对企业IT资产的信息及这些资产的配置信息管理,通常是运维管理系统、资源管理系统的基础,为运维管理、流程管理提供基础数据。使用CMDB可以帮助DevSecOps平台解决应用与应用、应用与技术组件、应用与基础设施的关联关系,如下图所示(CMDB中资产映射关系示意图)。

5.3 资源管理系统

资源管理系统主要是对IT资源进行综合管理,如资源申请、资源分配、资源占用、资源回收等。资产可API化管理和CMDB数据的及时准确是自动化运维的基础。尤其是在大量服务运行的IDC环境或云原生环境下,通过资源管理系统,一方面可以实现对资源的精细化管理,提高资源使用效率,降低IT成本;另一方面,为资源的合理使用及资源之上服务运行的稳定提供基础保障。云计算环境下的资源管理系统产品功能如下图所示:

5.4 制品仓库

制品仓库主要与软件研发过程相关,用于存储软件交付的成果性产物。例如,可发布的二进制安装包、可执行应用程序;编译构建阶段的阶段性输出产物等。

5.5 总结

这些相关系统的存在为整个研发过程中的持续集成、持续部署、线上运维等流程提供基础的平台保障,也是DevSecOps体系中不可或缺的一部分。

好了,本次内容就分享到这,欢迎大家关注《DevSecOps》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习十大算法之Word2Vec

Word2Vec模型介绍 1. 背景介绍 自然语言处理和词嵌入的重要性 自然语言处理(NLP)一直是人工智能领域中最具挑战性的问题之一。它旨在使计算机能够理解和解释人类语言,从而完成如文本翻译、情感分析和语音识别等任务。在这个过程中&#xf…

小狐狸JSON-RPC:wallet_addEthereumChain(添加指定链)

wallet_addethereumchain(添加网络) var res await window.ethereum.request({"method": "wallet_addEthereumChain","params": [{"chainId": "0x64", // 链 ID (必填)"…

.helper勒索病毒的最新威胁:如何恢复您的数据?

导言: 随着信息技术的不断进步,网络安全问题日益突出,其中勒索病毒成为了威胁网络安全的一大隐患。.helper勒索病毒作为近期频繁出现的一种恶意软件,其危害性和传播速度引起了广大用户的深切关注。本文将深入探讨.helper勒索病毒…

Spring Boot 防护 XSS + SQL 注入攻击

XSS跨站脚本攻击 ① XSS漏洞介绍 跨站脚本攻击XSS是指攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被解析执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击! ② XSS…

​python学习之变量类型​

print单纯输中的十种数据类型只需要用print()函数即可,()里面直接写变量名。 下面重点介绍print格式输出: 第一种方法:一个萝卜一个坑,下面的代码中,{0}、{1}、{2}分别表示j,i,j*i,单引号里面是输出格式。…

R语言做两次分类,再做两两T检验,最终输出均值和pvalue

1.输入文件&#xff1a; 2.代码&#xff1a; setwd("E:/R/Rscripts/rG4相关绘图")# 加载所需的库 library(tidyverse)# 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 组合Type1和Type2&#xff1a;通过…

<el-table>设置一列为固定字段,其他列为循环生成

<el-table :data"tableData" style"width: 100%"><el-table-columnprop"name"label"固定字段名":formatter"formatter"></el-table-column><el-table-columnv-for"(item, index) in wordsColumns…

Flask后端框架搭建个人图库

Hello&#xff0c;我是"小恒不会java" 前言 最近发现自己有一些站点图片丢失&#xff0c;原来是用了人家的链接。考虑到使用对象存储容易被刷流量&#xff0c;可以用flask这种轻量级框架快速实现网页登陆操作&#xff0c;行&#xff0c;也就不考虑正式生产环境那些复…

2024年3月第十五届蓝桥杯青少组STEMA测评Scratch图形化编程真题

一&#xff0e; 选择题 &#xff08;每题 10 分&#xff0c; 共 50 分&#xff09; 1. 运行以下程序后&#xff0c;鱼会向&#xff08; &#xff09;移动。 *选择题严禁使用程序验证&#xff0c; 选择题不答或答错都不扣分 A. 左 B. 右 C. 上 D. 下 2. 运行下列哪段程序&…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

单例模式如何保证实例的唯一性

前言 什么是单例模式 指一个类只有一个实例&#xff0c;且该类能自行创建这个实例的一种创建型设计模式。使用目的&#xff1a;确保在整个系统中只能出现类的一个实例&#xff0c;即一个类只有一个对象。对于频繁使用的对象&#xff0c;“忽略”创建时的开销。特点&#xff1a…

关系型数据库mysql(8)sql高级语句②

目录 一.子查询——Subquery 语法 环境准备 In——查询已知的值的数据记录 子查询——Insert 子查询——Update 子查询——Delete Not In——表示否定&#xff0c;不在子查询的结果集里 Exists——判断查询结果集是否为空 子查询——别名 ​编辑 二.视图 理论&a…

力扣由浅至深 每日一题.17 杨辉三角

以春为序&#xff0c;敬此荣枯 —— 24.3.28 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]…

MySQL ② —— 索引原理

1. 索引 1.1 分类 主键索引、唯一索引、普通索引、组合索引、以及全文索引 主键索引 非空唯一索引&#xff0c;一个表只有一个主键索引&#xff1b;在 innodb 中&#xff0c;主键索引的 B 树包含表数据信息。 唯一索引 不可以出现相同的值&#xff0c;可以有 NULL 值。 …

git教程

Git 教程 鲁迅曾经说过&#xff1a;“任何事情都有两面性&#xff0c;既有好的一面也会有坏的一面”&#xff0c;就像git&#xff0c;它既简单又复杂&#xff0c;为什么简单呢&#xff1f;因为常用的命令也就那么几个&#xff0c;多使用几次就能轻松掌握。复杂的是它的原理及更…

HarmonyOS 应用开发之UIAbility组件启动模式

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景&#xff0c;系统提供了三种启动模式&#xff1a; singleton&#xff08;单实例模式&#xff09;multiton&#xff08;多实例模式&#xff09;specified&#xff08;指定实例模式&#xff09;…

Prometheus +Grafana +node_exporter可视化监控Linux虚机

1、介绍 待补充 2、架构图 待补充 Prometheus &#xff1a;主要是负责存储、抓取、聚合、查询方面。 node_exporter &#xff1a;主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求&#xff1a;1台主服务器 n台从服务器 &#xff08;被监控的linux虚机&am…

利用机器学习打造反电信诈骗系统

利用机器学习打造反电信诈骗系统 技术与功能数据集与模型可视化分析与词云结语 随着互联网的普及&#xff0c;电信诈骗日益猖獗&#xff0c;给人们的生活和财产安全带来了巨大的威胁。为了有效应对这一挑战&#xff0c;我们开发了一款基于机器学习的反电信诈骗系统&#xff0c;…

基于单片机音乐喷泉制作设计资料

**单片机设计介绍&#xff0c;基于单片机音乐喷泉制作设计资料 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机音乐喷泉制作设计资料概要主要包括以下几个关键部分&#xff1a;系统概述、硬件设计、软件设计以及实现过…

网络空间测绘系统的商业应用

随着网络空间的不断发展和扩展&#xff0c;网络安全已经成为当今社会面临的重要挑战之一。为了有效应对网络安全威胁&#xff0c;网络空间测绘系统应运而生&#xff0c;成为网络安全领域的重要工具。 网络空间测绘系统不仅能够帮助安全研究人员进行研究和管理&#xff0c;还能为…