什么是持续部署
管理软件开发和部署有 3 种常见的方法:持续集成、持续交付,然后是持续部署。尽管它们经常被混淆,但它们是明显不同的。
正如您将在本文后面看到的,它们相互融合,并补充彼此的风格。但这篇文章并不是关于他们三个。今天我们想重点关注持续部署:什么是持续部署,它与其他方法有何不同,甚至它的流程和工具。在本文结束时,您将了解持续部署是否适合您的组织。
那么,让我们开始吧。
什么是持续部署?
持续部署是一种将软件自动发布或部署到生产环境中的软件开发方法。在此模型中,没有人手动检查代码并将其推送到您的应用程序中。
现在,这并不意味着没有事先进行彻底检查。显然,您必须知道正在部署的代码在交付最终用户(您的客户)手中之前是否没有错误和错误。但这也可以通过软件来完成。代码会自动测试问题,如果没有发现问题,则部署代码。
为了实现这一目标,团队必须设计或实施各种其他自动化程序,以无缝地将软件从开发的后期阶段一直拉到发布。持续部署的目标应该是显而易见的:编写代码并尽快将其交到用户手中。
但这可能很危险。如果在此过程中没有适当的检查,错误的代码可能会部署到生产中并真正搞砸您的产品,这就是为什么许多使用此方法的团队只发布小的更改。更改足够小,如果确实出现问题,则存在被遗漏的错误,那么将其回滚并重新开始并不是太困难。
但这些变化也足够大,可以快速累积起来,并为开发人员节省了大量的时间,使他们可以花在重复测试上。这也意味着,为了使持续部署成功,您需要确保拥有强大的测试框架,并确信当代码通过测试时,它确实准备好立即部署,而无需任何人查看。
对于许多开发人员来说,这个概念非常可怕,这就是为什么他们选择更安全、更常见的持续交付和持续集成选项。
但这三种方法有什么区别呢?
请仔细阅读,找出答案。
持续集成和持续交付与持续部署
图片标题
持续部署经常与持续交付混淆,但两者之间存在明显的区别。
持续部署部分是持续交付的延续,部分是持续交付的替代。让我们回到它们的来源来解释:持续集成。
根据 Aaron Cois 的说法,持续集成是一种旨在不断地将“团队中所有开发人员的源代码更新合并到共享主线中”的技术。这种持续的合并可以防止开发人员的软件项目本地副本随着其他人添加新代码而偏离太远,从而避免灾难性的合并冲突。”
现在,持续交付又向前迈进了一步。持续交付创建可以随时发布到生产环境的软件,这意味着软件被编写、测试并推送到类似生产的环境中,以确保它在真实的生产环境中正确运行。它位于等待区,直到您准备好最终部署它。
现在您可能已经认识到其中的差异了。持续集成将单独的代码片段合并在一起以确保它们正常工作,经常这样做可以避免出现重大问题。持续交付测试所有合并的代码,一旦被认为准备好部署,就将其放入保留区域,直到开发人员将其推送通过。持续部署需要持续交付的自动化测试,但不会就此止步,而是将新软件自动发布到生产环境中,直接发布给最终用户。
什么是持续部署管道?
您可能了解持续交付管道,并且在谈到持续部署管道时可能会摸不着头脑。说实话,与其说它是一个管道,不如说它是一个过程。但管道有助于理解这一点,因为它是一条线性的、结构化的路径。
因此,持续部署管道有四个阶段:
部署到生产环境
验证解决方案
监控问题
响应并恢复
我们将在下面更详细地介绍每个阶段。
部署到生产环境
这是显而易见的第一步。软件自动部署到生产中。可能不太明显的是,以这种方式操作时会放弃多少。例如,可以在没有完整功能的情况下部署对软件的更改,有时甚至无需完整的用户故事。部署过程应该快速且轻松。但它也应该尽可能可靠,当您自动化整个部署过程时,从服务器配置和基础设施配置到数据库脚本编写和代码迁移,您应该在首次构建和实现它之后密切监视整个过程,以确保它有效地发挥作用。建议您将所有可部署资产保留在版本控制中,并使用部署自动化工具来编写所有部署步骤的脚本。
因此,您的持续部署流程应从软件成功构建开始,然后进行轻松集成,并进行彻底验证,最后进行全面部署。理想情况下,整个工作流程将实现自动化,并通过“一次点击”操作。但不仅仅是自动化,持续部署还应该足够可靠,可以在一年中的任何一天运行,即使是在高峰时段。
以这种方式部署软件的能力需要您做七件事:
将软件部署到生产环境,而不向最终用户发布功能
在代码中实现切换,以便您可以在新旧功能之间切换。
自动将经过全面测试的软件从前一阶段部署到生产环境。
能够根据地理位置、用户角色和其他标准将软件部署到不同的生产环境中。
“自助”部署功能允许您使用单个命令将软件从暂存阶段转移到生产环境,以防未实现完全自动化或无法正常工作。
版本控制下的环境维护。
蓝/绿部署,因此您可以在两种不同的环境之间切换:部署和实时。
验证解决方案
现在,我们一直在讨论如何将软件部署到生产环境,然后发布给最终用户,但您可能没有意识到测试可以而且应该在生产环境中进行。根据软件测试帮助:“持续部署不必是‘发布到生产’。但代码已部署到生产中,并使用“功能切换”保持静音,当代码准备就绪时,功能切换将打开。”
这意味着部署和发布有时是耦合的,并且是背靠背发生的。但其他时候,它们是解耦的,为您提供了进行最后一轮测试的空间。您可以在此处执行多种测试:
烟雾测试
用户验收测试
压力测试
性能测试
其中一些只能在生产环境中完成。
这使得持续部署对于许多团队来说不再那么可怕。
如果您遵循持续集成,那么您就已经获得了质量保证,以确保软件按其应有的方式运行。但以后最好减少不愉快的意外发生的次数。特别是因为您不想回滚或尝试快速修复可能严重扰乱生产环境和业务流程的重大错误。
监控问题
软件最终部署完成了吗?几乎不。
虽然在生产过程中没有发生任何问题,但您的工作是监视部署的新代码的性能,以确保其继续按预期方式运行。这或多或少是持续部署的真正最后一步。您收集的见解越多,就越能实现战略业务成果。这些见解来自于增强的监控功能,您应该在软件发布之前就已经具备这些功能。
当然,在软件完全发布给最终用户之前,有很多商业价值指标是无法跟踪的。无论如何,安装监控系统可以让您跟踪每个软件功能,从而提高对任何生产问题的响应能力。
响应和恢复
虽然监控是持续部署管道的官方最后一步,但如果出现问题,它不会是您采取的最后一步。除了出色的自动化测试之外,有效持续部署的秘诀在于能够响应生产和发布中不可预见的问题并从中恢复。最重要的是,任何生产问题都会影响您的客户和最终用户。这对您的团队和业务都不利。对您的应用程序的信任可能会迅速消失。
大多数软件都需要某种修复和补丁的组合。但重新开发、重新测试和重新部署是另一个令人头疼的问题,您应该尽力避免。这就是为什么能够在问题被理解为问题之前主动检测问题并快速从中恢复至关重要的原因。当您的团队对快速找到问题的根本原因并在发现问题后立即解决问题的能力充满信心时,您就已经达到了持续部署的最佳状态。
但你必须小心,因为你不想陷入仓促改变的陷阱。这可能会使问题变得更糟并导致长期风险。
这就是为什么你应该确保你正在练习以下内容:
主动在软件中创建故障,以便在可能的问题和错误出现之前发现它们。
跨价值流合作来发现和解决问题。
重播最终用户会话以更好地了解事件并再次根除问题。
能够回滚到以前的环境。
无需改变生产环境。
在版本控制下维护环境。
如何开始持续部署
持续部署是一个部分、一个过程,可能会也可能不会作为完整 DevOps 计划的一部分来实现。这意味着,在开始使用持续部署之前,您需要将团队切换到 DevOps 框架。
DevOps 最好的部分是,它将最终与新软件项目交互的所有团队聚集在一起,并允许他们同时协作、提供和接收反馈,并加快开发和部署周期。
相关文章:
什么是持续部署
管理软件开发和部署有 3 种常见的方法:持续集成、持续交付,然后是持续部署。尽管它们经常被混淆,但它们是明显不同的。 正如您将在本文后面看到的,它们相互融合,并补充彼此的风格。但这篇文章并不是关于他们三个。今天…...
【Python】Loguru模块更简洁的日志记录库
Loguru: 更优雅的日志记录解决方案! loguru 是一个Python 简易且强大的第三方日志记录库,该库旨在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。 使用自带自带的 logging 模块的话,则需要…...
智慧环保:科技驱动下的环境保护新篇章
智慧环保:科技驱动下的环境保护新篇章 环境保护已经成为当今社会的重要议题,而科技的飞速发展为我们开启了智慧环保的新篇章。在这篇文章中,我们将介绍智慧环保所带来的机会和创新,以及科技在环境保护中的重要作用。 智慧环保的理…...
CTF-PWN环境搭建手册
工欲善其事必先利其器,作为一名CTF的pwn手,一定要有自己的专用解题环境。本文将详细记录kali下的pwn解题环境的安装过程,B站也会配备配套视频。 目录 安装前的准备工作 虚拟机环境编辑 VM版本安装教程 1. 下载Kali的VM虚拟机文件 2. 新…...
Nginx安装配置与SSL证书安装部署
一、Nginx Nginx是一款高性能的开源Web服务器和反向代理服务器,被广泛用于构建现代化的Web应用和提供静态内容。 nginx官网 这里下载nginx-1.24.0-zip Nginx是一款高性能的开源Web服务器和反向代理服务器,被广泛用于构建现代化的Web应用和提供静态内…...
高性能面试八股文之编译流程程序调度
1. C的编译流程 C语言程序的编译过程通常包括预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)四个主要阶段。下面是这些阶段的详细说明: 1.…...
opencv的MinGW-W64编译
最近使用Qt,需要用到opencv,安装详情参考下面这个网址,写的挺好: opencv的MinGW-W64编译 - 知乎 我电脑安装Qt中自带了MinGW,所以不需要像上面网址中的下载MinGw,只需要将Qt中自带的MinGW添加到环境变量即可,如&…...
在Go编程中调用外部命令的几种场景
1.摘要 在很多场合, 使用Go语言需要调用外部命令来完成一些特定的任务, 例如: 使用Go语言调用Linux命令来获取执行的结果,又或者调用第三方程序执行来完成额外的任务。在go的标准库中, 专门提供了os/exec包来对调用外部程序提供支持, 本文将对调用外部命令的几种使用方法进行总…...
python学习:break用法详解
嗨喽,大家好呀~这里是爱看美女的茜茜呐 在执行while循环或者for循环时,只要循环条件满足,程序会一直执行循环体。 但在某些场景,我们希望在循环结束前就强制结束循环。 Python中有两种强制结束循环的方法: continue语…...
【算法萌新闯力扣】:找到所有数组中消失对数字
力扣热题:找到所有数组中消失对数字 开篇 这两天刚交了蓝桥杯的报名费,刷题的积极性高涨。算上打卡题,今天刷了10道算法题了,题目都比较简单,挑选了一道还不错的题目与大家分享。 题目链接:448.找到所有数组中消失对…...
Node.js 安装配置
文章目录 安装检测Node是否可用 安装 首先我们需要从官网下载Node安装包:Node.Js中文网,下载后双击安装没有什么特殊的地方,安装路径默认是C盘,不想安装C盘的话可以选择一下其他的盘符。安装完成以后可以不用配置环境变量,Node安装已经自动给…...
前端JS 使用input完成文件上传操作,并对文件进行类型转换
使用input实现文件上传 // 定义一个用于文件上传的按钮<input type"file" name"upload1" />// accept属性用于定义允许上传的文件类型, onchange用于绑定文件上传之后的相应函数<input type"file" name"upload2"…...
探索AI交互:Python与ChatGPT的完美结合!
大家好!我是爱摸鱼的小鸿,人生苦短,我用Python!关注我,收看技术干货。 随着人工智能的迅速发展,AI交互正成为技术领域的一大亮点。在这个过程中,Python编程语言和ChatGPT模型的结合展现出强大的…...
CI/CD - jenkins
目录 一、部署 1、简介 2、部署 二、配置 三、实时触发 四、自动化构建docker镜像 五、通过ssh插件交付任务 六、添加jenkins节点 七、RBAC 八、pipeline 九、jenkins结合ansible参数化构建 1、安装ansible 2、新建gitlab项目 3、jenkins新建项目playbook 一、部…...
【【萌新的SOC学习之 VDMA 彩条显示实验之一】】
萌新的SOC学习之 VDMA 彩条显示实验之一 实验任务 : 本章的实验任务是 PS写彩条数据至 DDR3 内存中 然后通过 VDMA IP核 将彩条数据显示在 RGB LCD 液晶屏上 下面是本次实验的系统框图 VDMA 通过 HP接口 与 PS端的 DDR 存储器 进行交互 因为 VDMA 出来的是 str…...
相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象
//在此之前可以先浏览我编写的通用上位机类,更方便理解 https://blog.csdn.net/m0_51559565/article/details/134403745最近完成一个关于海康采图的demo,记录并说明用法。 先上代码。using System; using System.Collections.Generic; using System.Runt…...
linux时间调整
查看当前系统时间 [rootVM-12-12-centos ~]# date Sat Nov 18 16:09:11 CST 2023 Sat:表示星期六Saturday的缩写 Nov:表示十一月November的缩写 18:表示日期18号 16:09:11:时间 CST:China Standard Time中国标准…...
C++模版初阶
泛型编程 如下的交换函数中,它们只有类型的不同,应该怎么实现一个通用的交换函数呢? void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp…...
软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】 课本里章节里所有蓝色字体的思维导图...
Go 语言结构体验证详解:validate 标签与自定义规则
介绍 Go 语言中,结构体验证是保障数据完整性和正确性的重要手段之一。本文将深入探讨 validate 标签的使用方式,并介绍如何结合验证库 go-playground/validator 进行自定义验证规则。 安装与导入验证库 首先,请确保已安装验证库:…...
软考-高级-系统架构设计师教程(清华第2版)【第19章 大数据架构设计理论与实践 (P691~716)-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第19章 大数据架构设计理论与实践 (P691~716)-思维导图】 课本里章节里所有蓝色字体的思维导图...
深度学习YOLOv5车辆颜色识别检测 - python opencv 计算机竞赛
文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向࿰…...
c语言-浅谈指针(3)
文章目录 1.字符指针变量常见的字符指针初始化另一种字符指针初始化例: 2.数组指针变量什么是数组指针变量数组指针变量创建数组指针变量初始化例(二维数组传参的本质) 3.函数指针变量什么是函数指针变量呢?函数指针变量创建函数指…...
从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器
目录 1.定义函数get_database_process: 2.定义函数features_construct: 3.定义函数send_features_data: 4. 定义函数database_features_construct: 5. main 函数 1.定义函数get_database_process: …...
ARDUINO UNO 12颗LED超酷流水灯效果
效果代码: #define t 30 #define t1 20 #define t2 100 #define t3 50 void setup() { // set up pins 2 to 13 as outputs for (int i 2; i < 13; i) { pinMode(i, OUTPUT); } } /Effect 1 void loop() { effect_1(); effect_1(); effect_…...
Linux下查看pytorch运行时真正调用的cuda版本
一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式: 想要查看 Pytorch 实际使用的运行时的 cuda 目录,可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…...
分享mfc140u.dll丢失的解决方法,针对原因解决mfc140u.dll丢失的问题
作为电脑小白,如果电脑中出现了mfc140u.dll丢失的问题,肯定会比较的慌乱。但是出现mfc140u.dll丢失的问题,其实也有很简单的办法,所以大家不用慌张,接下来就教大家解决办法,能够有效的解决mfc140u.dll丢失的…...
torch_cluster、torch_scatter、torch_sparse三个包的安装
涉及到下面几个包安装的时候经常会出现问题,这里我使用先下载然后再安装的办法: pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本:https://data.pyg.org/whl/ 2、点进去然后&…...
软件安利——火绒安全
近年来,以优化、驱动、管理为目标所打造的软件屡见不鲜,大同小异的电脑管家相继走入了公众的视野。然而,在这日益急功近利的社会氛围驱动之下,真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…...
Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台
内容来源:xiaohuggg Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台 刚刚获得OpenAI CEOsama的个人投资! 它能够模拟人类浏览网页的行为,自动化地浏览网页,搜集关键信息,并对这些信息进行…...
vue3中使用reactive定义的变量响应式丢失问题(大坑!!!)
前言 在Vue 3中,可以使用reactive函数将普通JavaScript对象转换为响应式对象,这样当对象的属性发生变化时,就会自动更新相应的UI。 但是请注意以下情况可能会丢失数据的响应式: 响应式丢失的情况: 1、对使用reactiv…...
Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享
Windows Server 2012系统在没有安装远程多界面的情况下,最多只能同时运行2个远程桌面,如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面,但是没有安装就很不方便,今天飞飞来和你们分享Windows server 2012R2系统远…...
mysql之搭建MHA架构实现高可用
1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换(基于主从复制才能故障切换) MHA最少要求一主两从,半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃,MHA可以在0-30…...
Databend 与海外某电信签约:共创海外电信数据仓库新纪元
为什么选择 Databend 海外某电信面临的主要挑战是随着业务量的增加,传统的 Clickhouse Hive 方案在数据存储和处理上开始显露不足。 原来的大数据分析采用的 Clickhouse Hive 方案进行离线的实时报表。但随着业务量的上升后,Hive的数据存储压力变大&…...
scala解析命令行参数
如何用scala解析命令行参数: 首先,需要在项目中添加Apache Commons CLI库的依赖。可以在build.sbt文件中添加如下行: libraryDependencies "commons-cli" % "commons-cli" % "1.4" import org.apache.comm…...
盘点60个Python各行各业管理系统源码Python爱好者不容错过
盘点60个Python各行各业管理系统源码Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 源码下载链接:https://pan.baidu.com/s/1VdAFp4P0mtWmsA158oC-aA?pwd8888 提取码:8888 项目名…...
SpringSecurity6 | 自动配置(下)
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏…...
6、传统CV之均值滤波
在前5节,从最基础的像素开始了介绍,并且着重介绍了像素局部性、RGB图片和YUV图片以及通道的概念。 其实写那么多,很多细节知识也不用都学会,只需要知道计算机在处理图片时,看到的都是一堆像素,而这一堆像素,都是以数据点的形式存放在计算机中的。 为了更好的展示图像和…...
快速搭建本地的chatgpt
快速搭建本地的chatgpt 参考:一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)-CSDN博客 前提是linux下 已安装docker 命…...
分布式下多节点WebSocket消息收发
1、使用场景 2、疑问 第一次发送请求后,通过N1,W2,到达service2,建立websocket连接。 1、接下来发送的消息,通过Ngixn后和网关gateway后还能落在service2上面吗? 如果不能落在service2上,需要怎…...
LeetCode算法题解(动态规划)|LeetCode509. 斐波那契数、LeetCode70. 爬楼梯、LeetCode746. 使用最小花费爬楼梯
一、LeetCode509. 斐波那契数 题目链接:509. 斐波那契数 题目描述: 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:…...
【图像处理】:Otsu算法最大类间方差法(大津算法:附源码)
这里写自定义目录标题 数学原理算法评价参考链接 数学原理 以灰度图像为例,对于图像MN大小的矩阵,即图像中的像素,每一个值即为像素值,其中灰度图像像素值在(0~255)之间。 主要实现前景(即目标)和背景的分割: 主要公式…...
【uni-app】设置背景颜色相关
1. 全局页面背景色设置: 在App.vue的style样式表中设置 <style> page {background-color: #F0AD4E; } </style> 2. 顶部导航栏背景色设置: 在pages.json页面路由中,globalStyle设置 "globalStyle": {"navi…...
工厂模式-C++实现
工厂模式是一个创建型设计模式,即“对象创建模式”,通过这种模式可以绕开new,来避免对象创建过程中,也就是new的方法造成的紧耦合,从而支持对象创建的稳定。 工厂模式中引入了一个工厂类,该工厂负责根据客…...
安装应用与免安装应用差异对比
差异 安装的程序和免安装的应用程序之间有以下几个方面的差别: 安装过程:安装的程序需要通过一个安装程序或安装脚本进行安装。这个过程通常会将应用程序的文件和依赖项复制到指定的目录,并进行一些配置和注册操作。免安装的应用程序则不需要…...
FiscoBcos使用Go调用合约
环境: fisco2.8.0 go 1.17 go-sdk 1.0.0 solidity 0.4.25 前言 请提前启动好四个fisco节点。 请准备好一个属于此fisco节点的账户私钥【待会调用合约和部署合约会用到】 此文章将讲解 官方文档使用gosdk部署helloworld合约并调用其方法 合约开发样例 官网提示 G…...
自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)
spacy 简介 spacy 是 Python 自然语言处理软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错, 或者安装完 spacy,无法正…...
CTF-PWN-tips
文章目录 overflowscanfgetreadstrcpystrcat Find string in gdbgdbgdb peda Binary ServiceFind specific function offset in libc手工自动 Find /bin/sh or sh in library手动自动 Leak stack addressFork problem in gdbSecret of a mysterious section - .tlsPredictable …...
《Effective C++》条款21
必须返回对象时,别妄想返回其reference 如果你的运算符重载函数写成了返回reference的形式: class A { public:A(int a,int b):x(a),y(b){}friend const A& operator*(const A& a, const A& b); private:int x;int y; }; const A& opera…...
决策树,sql考题,30个经典sql题目
大数据: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学&#x…...