1. 持续集成简介

1.1 持续集成的作用

随着互联网的蓬勃发展,软件生命周期模型也经历了几个比较大的阶段,从最初的瀑布模型,到 V 模型,再到现在的敏捷或者 devops,不论哪个阶段,项目从立项到交付几乎都离不开以下几个过程,开发、构建、测试和发布,而且一直都在致力于又好又快地完成软件的交付。

然而大多数互联网公司面临的常态却是,临近上线日全员待命,如临大敌,通宵达旦,生怕出现上线事故导致版本回滚,即使暂时上线成功后也可能会出现明明测试环境全部通过了,却依然有各种线上质量问题频发。这些现象的主要原因就是代码合并的太晚,而且每次改动未经过充分的测试,代码合并时出现冲突,为了解决冲突重新修改代码,新修改的代码又有可能会引发新的问题,进入了恶性循环。

那么如何才能快速地合并代码,快速地构建,快速地测试,快速地发布高质量的代码呢?持续集成就应运而生了,它的宗旨就是多次合并代码,合并完成后在各种环境下进行多次充分的测试,保证版本的可用性和代码更改的正确性。

1.2 持续集成的定义

我们经常听到的持续工程方法有 3 个,分别为持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deploy,CD)。

  • 持续集成:指的是在一定时间内,开发人员多次将代码合并到同一主干上。代码入库后将代码编译打包成可以发布的形式,先发布到测试环境进行详细全面的测试(如果是代码修复的情况下可以根据实际情况只进行精准的测试),测试环境通过后再发布到预生产环境,最终部署到线上环境。目的就是频繁的集成以便发现其中的错误。
  • 持续交付:强调的是短时间内完成可以随时发布的软件产品,对每一个进入主干分支的代码提交后,构建打包,测试环境验证通过,预发布环境进行验证,保证产品是可发布的状态。目的是快速地得到市场的反馈,以便更好地进行开发和设计。
  • 持续部署:将每一次代码提交后,都构建出产品直接上线,交付给用户使用。

以上 3 个流程的本质都是为了保证每一次代码合并后都能经过一系列的验证,保证这些变更的质量。以下是 3 个持续过程的流水线示意图:

1.3 持续集成的原则

测试要尽量得充分

因为持续集成最终的目的是保证版本的可用性,而且由于多人协作,合并后的代码有可能对整个的软件都会有影响,所以一般情况下需要把所有的测试流程都走一遍,比如静态代码扫描、单元测试、功能测试、接口测试、性能测试等等;如果只是修复了一些 bug,代码改动不大的情况下,可以只做一些针对性测试。

测试的速度要尽可能得快

持续集成中每天都会有代码合并,甚至一天有好几次合并,如果测试的效率不够高的话很可能会出现一个打包的版本还未测试完成,新的版本就已经出现了,甚至积压几个版本,这样的话就不能及时的发现是哪个版本出现的问题,而且开发一直是在有问题的版本上进行的修改,所以这就要求测试的速度要快,自动化测试肯定是不可或缺的,甚至还要并行或者分布式执行测试。

尽量使用和生产环境类似的环境进行测试

如果持续集成采用的测试环境和线上环境差异太大的话,测试的结果很可能是不准确的,有些线上的问题也是很难发现的,特别是关于性能测试的结果,资源和锁等问题。所以采用和线上环境完全一样的环境时最理想的,如果条件不允许的话要尽可能采用同比例缩小的环境进行测试,以保证测试结果的准确性。

1.4 整体流程

 

2. 持续集成环境搭建

Win10 + Jenkins 2.277.2 + JDK 1.8 + Maven + Git + Tomcat

2.1 Git 安装

1)登录官网下载安装包:官网 https://git-scm.com/download/win

2)下载完成后双击安装,如下图所示:

双击 exe 文件,一路 next 即可。

3)配置环境变量:将 Git 的 bin 目录 添加到环境变量。

4&#

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

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

相关文章

关于 java:11. 项目结构、Maven、Gradle 构建系统

一、Java 项目目录结构标准1.1 Java 项目标准目录结构总览标准 Java 项目目录结构(以 Maven / Gradle 通用结构为基础):project-root/ ├── src/ │ ├── main/ │ │ ├── java/ # 主业务逻辑代码(核心…

大数据的安全挑战与应对

在大数据时代,大数据安全问题已成为开发者最为关注的核心议题之一。至少五年来,大数据已融入各类企业的运营体系,而采用先进数据分析解决方案的组织数量仍在持续增长。本文将明确当前市场中最关键的大数据安全问题与威胁,概述企业…

PostgreSQL ERROR: out of shared memory处理方式

系统允许的总锁数 SELECT (SELECT setting::int FROM pg_settings WHERE name max_locks_per_transaction) * (SELECT setting::int FROM pg_settings WHERE name max_connections) (SELECT setting::int FROM pg_settings WHERE name max_prepared_transactions);当锁大于…

Django 模型(Model)

1. 模型简介 ORM 简介 MVC 框架中一个重要的部分就是 ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。即直接面向对象操作数据,无需考虑 sql 语句。 ORM 是“对象-关系-映射”的简称,主要任务是:…

深入解析Hadoop RPC:技术细节与推广应用

Hadoop RPC框架概述在分布式系统的核心架构中,远程过程调用(RPC)机制如同神经网络般连接着各个计算节点。Hadoop作为大数据处理的基石,其自主研发的RPC框架不仅支撑着内部组件的协同运作,更以独特的工程哲学诠释了分布…

为什么玩游戏用UDP,看网页用TCP?

故事场景:两种不同的远程沟通方式假设你需要和远方的朋友沟通一件重要的事情。方式一:TCP — 打一个重要的电话打电话是一种非常严谨、可靠的沟通方式。• 1. 建立连接 (三次握手):• 你拿起电话,拨号(SYN)。• 朋友那…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(二)

High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion 这篇文章可以从一个带有纹理的几何物体出发,将其身上的纹理自动提取并映射到任意的几何拓扑结构上(见下图红线左侧);或者从一个白模几何对象出发&#x…

深度学习图像分类数据集—玉米粒质量识别分类

该数据集为图像分类数据集,适用于ResNet、VGG等卷积神经网络,SENet、CBAM等注意力机制相关算法,Vision Transformer等Transformer相关算法。 数据集信息介绍:玉米粒质量识别分类:[crush, good, mul] 训练数据集总共有3…

Unity VR手术模拟系统架构分析与数据流设计

Unity VR手术模拟系统架构分析与数据流设计 前言 本文将深入分析一个基于Unity引擎开发的多人VR手术模拟系统。该系统采用先进的网络架构设计,支持多用户实时协作,具备完整的手术流程引导和精确的工具交互功能。通过对系统架构和数据管道的详细剖析&…

【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册

Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册一、Spring Boot 4.0 核心AI能力矩阵二、AI智能编码插件实战(Spring AI Assistant)1. 安装与激活2. 实时代码生成场景3. 缺陷预测与修复三、AI引…

audiobookshelf-web 项目怎么运行

git clone https://github.com/audiobookshelf/audiobookshelf-web.git cd audiobookshelf-web npm i 启动项目 npm run dev http://localhost:3000/

扫描文件 PDF / 图片 纠斜 | 图片去黑边 / 裁剪 / 压缩

问题:扫描后形成的 PDF 或图片文档常存在变形倾斜等问题,手动调整颇为耗时费力。 一、PDF 纠斜 - Adobe Acrobat DC 1、所用功能 扫描和 OCR: 识别文本:在文件中 → 设置 确定后启动扫描,识别过程中自动纠偏。 2、…

适配器模式:兼容不兼容接口

将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。代码示例:// 目标接口(客户端期望的格式) interface ModernPrinter {void printDocument(String text); }// 被适配的旧类(不兼容) class…

流程控制:从基础结构到跨语言实践与优化

流程控制 一、流程控制基础概念与核心价值 (一)流程控制定义与本质 流程控制是通过特定逻辑结构决定程序执行顺序的机制,核心是控制代码运行路径,包括顺序执行、条件分支、循环迭代三大核心逻辑。其本质是将无序的指令集合转化为有…

Http与Https区别和联系

一、HTTP 详解 HTTP(HyperText Transfer Protocol)​​ 是互联网数据通信的基础协议,用于客户端(浏览器)与服务器之间的请求-响应交互 核心特性​​: 1.无连接(Connectionless)​​…

飞算JavaAI:开启 Java 开发 “人机协作” 新纪元

每日一句 明天是新的一天, 你也不再是昨天的你。 目录每日一句一、需求到架构:AI深度介入开发“源头设计”1.1 需求结构化:自然语言到技术要素的精准转化1.2 架构方案生成:基于最佳实践的动态适配二、编码全流程:从“…

Qt项目锻炼——TODO(五)

发现问题如果是自己创建的ui文件,怎么包含进自己的窗口类并且成为ui成员?一般来说Qt designer 会根据你.ui文件生成对应的ui_文件名这个类(文件名是ui文件名),它包含了所有 UI 组件(如按钮、文本框、标签等…

Vue框架之模板语法全面解析

Vue框架之模板语法全面解析一、模板语法的核心思想二、插值表达式:数据渲染的基础2.1 基本用法:渲染文本2.2 纯HTML渲染:v-html指令2.3 一次性插值:v-once指令三、指令系统:控制DOM的行为3.1 条件渲染:v-if…

从零开始的语言模型构建 CS336 第一课(一)

语言模型的发展历史 🏗 Early foundation models (2010年代后期) 2018:ELMo(基于 LSTM 预训练 微调)[Peters 2018]2018:BERT(基于 Transformer 预训练 微调)[Devlin 2018]2019:G…

微信获取access_token授权的两种不同情况

1.网页授权:需要页面调用授权的sdk,首先需要获取到code参数 (A.网页版的获取code参考另一篇文章:https://blog.csdn.net/ettamei/article/details/148763361?spm1011.2415.3001.5331 B.前端sdk提供:code只有5分钟的有…