持续集成与版本控制的相关概念

目录

一、持续集成

1.1 持续集成基本概念

1.1.1 持续集成的含义

1.1.1.1 持续集成流程是依赖产品版本迭代和版本分支而产生的

1.1.1.2 持续集成流程中包含的内容

1.1.2 传统打包模式说明

1.1.2.1 传统打包模式概述

1.1.2.2 传统打包模式问题

1.1.3 持续集成模式

1.1.3.1 持续集成模式概述

1.1.3.2 持续集成模式流程说明

二、版本控制

2.1 版本控制的基本概念

2.1.1 版本控制的含义

2.1.2 版本控制的好处

2.1.3 版本控制软件的基本功能

2.1.3.1 检入检出控制

2.1.3.2 分支和合并

2.1.3.3 版本历史记录

三、其它基本概念

3.1 概述

3.2 代码仓库

3.3 开发环境

3.4 代码编译

3.5 编程语言


一、持续集成

1.1 持续集成基本概念

在前面文章介绍DevOps模型时曾提及持续集成的概念,是指通过持续地将需求转化为开发的代码,合并到源码仓库主干分支上,并确保代码合并后的集成测试通过的这一段流程

1.1.1 持续集成的含义

1.1.1.1 持续集成流程是依赖产品版本迭代和版本分支而产生的

持续集成流程是依赖产品版本迭代和版本分支而产生的,每一个不同的版本迭代,每一个不同的开发者,将其合并到主分支的过程。

1.1.1.2 持续集成流程中包含的内容

持续集成流程中,除了代码分支合并之外,还包含单元测试、功能测试、集成测试等内容。代码分支合并直至完成集成测试,这些结合在一起才是持续集成流程所包含的内容。


明白了上述两层含义之后,再回到软件研发的过程中,来讨论持续集成的概念,这样方便大家能更深刻地理解持续集成的概念和意义。

1.1.2 传统打包模式说明

1.1.2.1 传统打包模式概述

前文介绍DevSecOps发展时,曾提及开发人员的开发环境和工作模式的变化。在互联网行业早期,没有使用持续集成工具之前,开发人员通常在本地计算机开发代码,然后提交到SVN、Git之类的版本控制服务器上。当多人的团队合作开发时,提交时会涉及代码合并,合并后的代码通过编译后,再部署到测试环境进行测试验证

大概如下图所示的流程:

1.1.2.2 传统打包模式问题
  • 开发人员在本地计算机开发代码后,完成了单元测试,但版本发布时,却要面临不同人员开发的代码进行合并后的重新测试。
  • 开发人员在本地计算机开发并完成验证的应用程序,因本地环境和测试环境的不一致导致应用程序无法启动。
  • 每次打包应用程序时,都需要重新编译、构建,重复的工作虽简单但又无法省略,增加无效的工作量。
  • 准备发布的版本正在测试中,新的功能迭代已开始,开发的代码提交后需要针对不同的版本进行代码管理,防止代码版本与功能混淆。

1.1.3 持续集成模式

1.1.3.1 持续集成模式概述

诸如上述这些问题,在软件开发过程中时常出现。为了解决这些问题,业界逐步推出了持续集成的概念,意图通过持续集成工具的使用,减少开发过程中重复的人工任务,降低人工操作带来的出错率,释放开发人员的精力,更多地专注于业务功能开发本身。

大概流程如下图所示:

1.1.3.2 持续集成模式流程说明

从上图中可以看出,通过持续集成工具的使用,将开发人员代码编写、代码提交、编译构建、测试验证等环节组合在一起,形成了一个流水线管道或标准化流程。基于这个流程,开发人员可以把编译、构建的重复工作交于持续集成工具去做,代码的质量、代码的安全可以通过持续集成工具与代码检测工具、安全工具的集成来自动化去做。在流程中,也可以设置门禁或卡点,如严重缺陷达到2%时,流程自动中断;发现严重代码安全漏洞时,流程中断;依赖组件不合规时,流程中断等。开发人员只需要关注流程的输出,保证结果符合流程定义的要求即可。

二、版本控制

2.1 版本控制的基本概念

在软件工程中,为了保障软件版本的发布或持续集成流程的落地,需要做软件开发过程输出产物的版本管理,这是版本控制的最初由来。下面,首先来介绍版本控制的基本概念。

2.1.1 版本控制的含义

版本控制是指在软件工程中,针对目录、代码、资源等进行管理,记录一个或多个文件的变化,以便查阅特定版本的修改历史,了解版本的快照信息

2.1.2 版本控制的好处

  • 通过版本控制管理,能对每一个不同的版本迭代所包含的代码、资源、数据等进行快照、备份、还原,帮助项目组人员快速找到原始文件。
  • 当项目组中有多人参与协同开发时,采用版本控制管理中的分支和合并,可以高效地解决不同开发人员、不同版本之间的协同冲突问题,提升协同效率。

2.1.3 版本控制软件的基本功能

在大多数项目管理中,版本控制是使用版本控制软件或系统来实现的。一个标准的版本控制系统至少包含以下几个部分的功能。

2.1.3.1 检入检出控制

检入检出是软件开发人员在编码过程中对源文件进行修改的最基本操作,当项目管理使用版本控制系统进行源代码管理时,所有的源代码都托管在代码仓库里。为了保障版本的可控性,所有人员在修改源代码之前,需要从代码仓库中对代码进行检出操作,表示当前的源代码文件被检出的人所独占,检出后开发人员可以在自己的工作空间下进行文件编辑。当开发人员编辑完成后,再执行检入操作,提交到代码仓库,释放对代码源文件的占用,便于其他项目人员对文件进行修改,如下图所示。

如果没有检入检出的控制机制,则项目的源代码管理就会产生混乱,如几个人同时修改文件,提交代码时导致其他人修改的代码被丢失。通过检入检出控制过程,同步控制代码仓库中源代码版本的正确性,从而保证不同的人协同开发时,并发提交和修改的源代码文件不会产生版本混乱的情况。

2.1.3.2 分支和合并

分支和合并是版本控制系统中很重要的两个基本功能。下面通过版本的几个概念来了解它们的含义。首先,来看看主版本或基线版本。

在版本管理中,一般把第一个关键里程碑的产物作为基线版本,或主版本。在此版本基础上,加上标签,实施版本控制管理。之后的所有版本都以此版本为基础。如果在此版本上复制一份,单独建立一个分支,则为分支版本。

分支版本独立于主版本开发一段时间后,完成了分支所需要的功能,再将分支版本合并到主版本中,则产生合并版本,如下图所示。

无论是主版本、分支版本还是最终的合并版本,都是版本控制过程中不断进行迭代的结果。分支和合并成为版本控制过程中最为常见的基本操作。

2.1.3.3 版本历史记录

每一个版本的迭代和修改都会产生版本的历史记录。记录历史版本的版本号、版本修改时间、版本修改者、版本修改描述等信息是版本控制系统中常见的功能。通过版本历史记录,项目管理人员、代码开发人员可以方便地找到某个版本对应的代码文件、代码片段、修改信息,可以通过此信息,还原历史,查找问题,追溯修改内容等。

三、其它基本概念

3.1 概述

在黄金管到持续集成阶段中,除了持续集成、版本控制的基本概览外,还有一些其他的概念也是非常重要的,了解它们可以帮助读者更清晰、全面地掌握持续集成流程中涉及的技术组件和流程流转。

3.2 代码仓库

代码仓库又称储存库、资源库、代码库,是版本控制系统底层存储的数据结构的总称,通常是指版本控制系统中文件存储模块,它主要包含存储的源代码文件、目录结构、元数据等。用户通过版本控制系统对这些存储的文件进行管理(如文件的修改、删除、历史跟踪、还原等)。例如,GitHub、GitLab、码云等。

3.3 开发环境

开发环境是指开发人员进行编码开发的工作环境,通常包含开发语言及其运行环境、开发工具。在DevSecOps中,不同的开发工具涉及不同的IDE安全插件,以帮助开发人员在本地计算机中检测代码的安全性。常见的IDE有Visual Studio、Eclipse、Android Studio、IntelliJ IDEA等。

3.4 代码编译

代码编译是指使用编译工具、编译器将开发人员开发的源代码转为目标代码的过程的。开发人员生产出来的源代码是否具备可执行性,需要转为目标机器的可执行程序才可以在目标机器上运行。如果目标机器是操作系统,则编译后的是汇编类代码,形成可执行文件,通过加载器加载后被操作系统调用;如果目标机器是虚拟机,如JVM虚拟机,则编译后为字节码,即JVM虚拟机可执行的解释型语言。代码编译的过程,一般使用编译器,编译器读取源代码,对源代码进行语法分析,通过结构化语法树、代码优化、流程控制等操作,最终生成目标机器可执行的程序或字节码。

3.5 编程语言

编程语言是指软件开发所使用的开发语言,程序员使用编程语言编写应用程序代码,通过代码和算法实现,向计算机发生指令,以完成业务操作所需要的功能。按照编程语言的发展阶段,大体可以分成机器语言、汇编语言、高级语言三类。本书重点是指高级语言,如Java、C++、C语言、net、C#、Python、PHP、Ruby等。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、Vite React基础配置,Ant Design Mobile组件库,axios,路由的使用

文章目录 创建reactts项目安装Ant Design Mobile移动端组件库安装路由配置别名安装aixos配置封装 创建reactts项目 创建好后进入react_ts目录npm i 安装依赖 // 固定写法,可单独创建 名字 模板 reactts npm create vitelatest react_ts -- --templ…

day70 Mybatis使用mapper重构xml文件重新修改商品管理系统

day67 基于mysql数据库jdbcDruidjar包连接的商品管理用户购物系统-CSDN博客 1多表操作 2动态SQL 项目中使用的为商品管理系统的表 一 查询商品信息 编号,名称,单价,库存,类别 1表:商品表,类别表 n对1…

java图书管理系统(简易)

实现的基本功能: 登录时,需要输入姓名,然后选择作为管理者还是普通用户。选择成功后选择想要实现的功能。管理者的目录下方有有五个功能,而普通用户有4个功能,如下图 首先我们要建立Book这个类,里面包含书…

sqlite跨数据库复制表

1.方法1 要将 SQLite 数据库中的一个表复制到另一个数据库,您可以按照以下步骤操作: 备份原始表的SQL定义和数据: 使用 sqlite3 命令行工具或任何SQLite图形界面工具,您可以执行以下SQL命令来导出表的SQL定义和数据&#xff1a…

开发过程中PostgreSQL常用的SQL语句,持续更新ing

修改字段类型 -- ALTER TABLE 模式名.表明 ALTER COLUMN 字段名 TYPE 类型; alter table alarm.alarm_produce_config alter column alarm_level type int4;重置序列值 -- ALTER SEQUENCE 序列名 RESTART WITH 序列值; alter sequence enterprise_type_id_seq restart with 1…

腾讯云轻量8核16G18M服务器多少钱一年?

腾讯云轻量8核16G18M服务器多少钱一年?优惠价格4224元15个月,买一年送3个月。配置为轻量应用服务器、16核32G28M、28M带宽、6000GB月流量、上海/广州/北京、380GB SSD云硬盘。 腾讯云服务器有两个活动,一个是官方的主会场入口,还…

算法打卡day19

今日任务: 1)235. 二叉搜索树的最近公共祖先 2)701.二叉搜索树中的插入操作 3)450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode&…

kafka-eagle 配置文件修改使用自带的数据库

###################################### multi zookeeper & kafka cluster list Settings prefixed with ‘kafka.eagle.’ will be deprecated, use ‘efak.’ instead ###################################### efak.zk.cluster.aliascluster1 #cluster1.zk.listip1:…

javaScript【2】

在 JavaScript 中,let、var 和 const 是用于声明变量的关键字,它们之间有一些区别。 var:var 是 JavaScript 最早引入的变量声明关键字。使用 var 声明的变量具有函数作用域,意味着变量在声明它的函数内可见。如果在函数内部使用…

Adobe推出20多个,企业版生成式AI定制、微调服务

3月27日,全球多媒体领导者Adobe在拉斯维加斯召开“Summit 2024”大会,重磅推出了Firefly Services。 Firefly Services提供了20 多个生成式AI和创意API服务,支持企业自有数据对模型进行定制、微调,同时可以与PS、Illustrator、Ex…

华为开源自研AI框架昇思MindSpore应用案例:梯度累加

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现 梯度累加的训练算法,目的是为了解决由于内存不足,导致Batch size过大神经网络无法训练,或者网络模型过大无法加载的OOM(Out Of Memory&#xff…

Learn OpenGL 26 视差贴图

什么是视差贴图 视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难…

uniapp写小程序如何实现分包

众所众知小程序上传的过程中对包的大小有限制,正常情况下不允许当个包超过2M,所以需要分包 需要再pages.json这个文件夹中进行配置 "pages": [{"path": "pages/index/index","style": {"navigationBarTit…

备考ICA----Istio实验11---为多个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验11—为多个主机配置TLS Istio Ingress Gateway实验 1. 部署应用 kubectl apply -f istio/samples/helloworld/helloworld.yaml -l servicehelloworld kubectl apply -f istio/samples/helloworld/helloworld.yaml -l versionv12. 证书准备 接上一个实验…

Hive常用函数之字符串处理

Hive常用函数之字符串处理 以下是Hive中常用的字符串处理函数,可用于执行各种字符串处理转换操作。 1. CONCAT():将多个字符串连接在一起。 SELECT CONCAT(Hello, World); -- Output: HelloWorld2. SUBSTR():从字符串中提取子字符串&#xf…

【备忘录】Linux系统安全限制:禁用或限制用户ssh登录

查看失败的IP iplist$(/bin/lastb |awk {print $3}|sort|uniq -c|awk {if ($1>1500) print $2} | grep -v "^10.0.0.") 并将ip追加到黑名单 for ip in ${iplist} doecho ALL: ${ip} >> /etc/hosts.deny# sshd 失败ip追加到黑名单echo "sshd:112.192.…

计算机网络:物理层 - 信道复用

计算机网络:物理层 - 信道复用 频分复用时分复用统计时分复用波分复用码分复用 计算机网络中,用户之间通过信道进行通信,但是信道是有限的,想要提高网络的效率,就需要提高信道的利用效率。因此计算机网络中普遍采用信道…

笔记本作为其他主机显示屏(HDMI采集器)

前言: 我打算打笔记本作为显示屏来用,连上工控机,这不是贼方便吗 操作: 一、必需品 HDMI采集器一个 可以去绿联买一个,便宜的就行,我的大概就长这样 win10下载 PotPlayer 软件 下载链接:h…

【微服务篇】深入理解微服务网关原理以及Spring Gateway

微服务网关的作用 微服务网关在微服务架构中扮演着至关重要的角色,它主要负责请求的路由、组成服务间的通信桥梁、聚合不同服务的数据以及提供跨服务的统一认证机制。以下是微服务网关的几个主要作用: 请求路由: 微服务网关充当所有入站请求的入口点&a…

PHP - ZipArchive上传、下载实例

概述 在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用PHP语言操作ZipArchive实践和实例,ZipArchive需要服务器上安装zlib库,php扩展中安装zip扩展。 服务器环境扩展 ZipArchive类库的PHP版本要求如下,另外ph…