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

news2024/10/2 1:23:11

目录

一、持续集成

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.coloradmin.cn/o/1549672.html

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

相关文章

FFmpeg初步了解

一、了解FFmpeg 1.1 什么是FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证…

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注:本文来自Flexera2024年的云现状调研报告的翻译。原报告地址: https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司,有30年发展历史,5万名客户,1300名员工。Flex…

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

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

mac-git上传至github(ssh版本,个人tokens总出错)

第一步 git clone https://github.com/用户名/项目名.git 第二步 cd 项目名 第三步 将本地的文件移动到项目下 第四步 git add . 第五步 git commit -m "添加****文件夹" 第六步 git push origin main 报错: 采用ssh验证 本地文件链接公钥 …

【机器学习300问】53、什么组合特征?为什么要组合特征?

一、什么是组合特征? 组合特征是指在机器学习通过将两个或多个基础特征进行某种形式的结合而创建的新特征。这些新特征是描述数据的新视角,这有助于模型发现和学习数据中更复杂的模式。 例如,在广告点击预测问题中,我们有两个基础…

协程库-锁类-实现线程互斥同步

mutex.h:信号量,互斥锁,读写锁,范围锁模板,自旋锁,原子锁 锁 **锁不能进行拷贝操作:**锁是用于管理多线程并发访问共享资源的同步原语。这些锁包括互斥锁(mutex)、读写锁…

数仓建设实践——58用户画像数仓建设

目录 一、数据仓库&用户画像简介 1.1 数据仓库简介 1.2 数据仓库的价值 1.3 用户画像简介 1.4 用户画像—标签体系 二、用户画像数仓建设过程 2.1 画像数仓—背景&现状 2.2 画像数仓—整体架构 2.3 画像数仓—研发流程 2.4 画像数仓—指标定义 2.5 画像数仓…

Day50:WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

目录 文件包含-原理&分类&利用&修复 文件读取 文件写入 代码执行 远程利用思路 黑盒利用-VULWEB 白盒利用-CTFSHOW-伪协议玩法 78-php&http协议 79-data&http协议 80-81-日志包含 87-php://filter/write&加密编码 88-data&base64协议 …

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录 下载数据集NSL-KDD数据集介绍输入的41个特征输出的含义数据处理&&训练技巧建神经网络,输入41个特征,输出是那种类别的攻击模型训练模型推理写gradio前端界面,用户自己输入41个特征,后端用模型推理计算后显示出是…

银行卡的分类

银行卡是银行账户的一种体现形式,它是由银行机构发行的具有消费信用、转账结算、存取现金等全部或部分功能作为结算支付工具的各类卡的统称。 (1)按是否具有授信额度分类 ①借记卡:借记卡是指发卡银行向申请人签发的,没…

牛客NC79 丑数【中等 堆、优先级队列 Java,Go,PHP Go和PHP中我自己实现了优先级队列】

题目 题目链接: https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b 思路 注意: 数据范围:0≤n≤2000, 2000肯定到不了,最多到1690,相同题目链接:https://www.lintcode.com…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

2.2 添加商户缓存

实战篇Redis 2.2 添加商户缓存 在我们查询商户信息时,我们是直接操作从数据库中去进行查询的,大致逻辑是这样,直接查询数据库那肯定慢咯,所以我们需要增加缓存 GetMapping("/{id}") public Result queryShopById(Pat…

政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 与计算机一样的古老历史 神经网络的出现可追溯到20世纪40年…

Android源码阅读WorkMangaer - 6

前言 由于笔者目前水平限制,表达能力有限,尽请见谅。 WorkManager 是 Android Jetpack 库的一部分,提供了一种向后兼容的方式来安排可延迟的异步任务,这些任务即使在应用退出或设备重启后也应该继续执行,它是 Androi…

记录 AI绘图 Stable Diffusion的本地安装使用,可搭建画图服务端

开头 最近刷短视频看到了很多关于AI绘图,Midjourney,gittimg.ai,Stable Diffusion等一些绘图AI工具,感受到了AI绘画的魅力。通过chatGPT生成关键词再加上绘图工具,真是完美,文末教大家如何用gpt提词 Midj…

Anaconda的GEE环境中安装torch库

打开Anaconda,点击运行,打开terminal 输入pip install torch 而且由于anaconda中自己配置好了镜像源,在pip时自动使用清华镜像源

2024年4月份 风车IM即时通讯系统APP源码 版完整苹果安卓教程

关于风车IM,你在互联网上能随便下载到了基本都是残缺品, 经过我们不懈努力最终提供性价比最高,最完美的版本, 懂货的朋友可以直接下载该版本使用,经过严格测试,该版本基本完美无缺。 下载地址:…

【正点原子FreeRTOS学习笔记】————(4)FreeRTOS中断管理

这里写目录标题 一、什么是中断?(了解)二、中断优先级分组设置(熟悉)三、中断相关寄存器(熟悉)四、FreeRTOS中断管理实验(掌握) 一、什么是中断?(…