通过自动化部署消除人为操作:不断提高提交部署比率

三十年后,我仍然热爱成为一名软件工程师。事实上,我最近读了威尔·拉森(Will Larson)的《员工工程师:超越管理轨道的领导力》,这进一步点燃了我以编程方式解决复杂问题的热情。知道雇主继续照顾员工、原则和杰出的工作分类,为想要成为一名工程师的技术人员提供了新鲜空气。

不幸的是,好的事情有时也会带来不太好的事情。对于今天的软件工程师来说,现实并不那么理想,因为 Toil 不断寻找一种方法来破坏日常工作效率。一个常见的例子是部署我们的工件——尤其是部署到生产环境中。

是时候更加重视部署自动化了。

传统的部署生命周期

软件工程师的开发生命周期通常围绕三个简单的步骤:开发、审查和合并。基于这些步骤,以下流程图说明了传统的部署生命周期:

图 1.传统开发生命周期

在图 1 中,软件工程师介绍了底层源代码的更新。创建合并请求后,持续集成 (CI) 工具将执行单元测试并执行静态代码分析。如果成功完成这些步骤,第二位软件工程师将对更改进行代码审查。如果这些更改获得批准,原始软件工程师会将源代码更改合并到主分支中。

此时,软件工程师开始部署到开发环境 (DEV),该部署由持续交付 (CD) 工具处理。在此示例中,候选版本被部署到开发人员并执行其他测试(如回归测试)。如果这两个步骤都通过,软件工程师将通过相同的 CD 工具启动到 QA 环境的部署。接下来,软件工程师创建变更单以将源代码更新发布到生产环境 (Prod) 中。一旦批准经理批准了变更单,软件工程师就会开始部署到产品中。此步骤指示 CD 工具执行产品部署。

不幸的是,流程中有几个点涉及到基于人工的任务。

是时候专注于消除辛劳了

Google 站点可靠性工程的 Eric Harvieux对 Toil 的定义如下:

“辛劳是一种往往是手动的、重复性的、自动化的、战术性的工作,缺乏持久的价值,并且随着服务的增长而线性扩展。”

软件工程师应该改变他们的心态,认识到在他们的角色和职责中识别辛苦。一旦承认辛劳,就应该制定任务来消除这些不利于生产力的项目。大多数敏捷团队会预留 20% 的冲刺能力用于积压任务。消除劳累始终是此类工作的完美候选者。

在图 1 中,以下任务是手动处理的,应视为“Toil”:

  1. 开始DEV部署
  2. 开始质量检查部署
  3. 创建变更单
  4. 经理批准变更票
  5. 开始产品部署

为了推动下一代部署生命周期,实现“Toil-free”非常重要。

DevOps 生命周期和部署自动化

虽然消除繁重工作是下一代部署生命周期的一个重要方面,但通过 DevOps 实现部署自动化也同样重要。使用 DevOps 管道,我们可以自动化部署流程,如下所示:

  1. 合并到主事件完成后创建发布候选映像。
  2. 创建新的候选版本时,自动部署到 DEV。
  3. 成功部署到 DEV 后继续部署到 QA。
  4. 一旦 QA 部署成功,就以编程方式创建变更票证。

在实施上述自动化过程中,消除了五项人工任务中的三项。为了减轻剩下的两项任务,可以利用可观察性平台。

服务所有者通常依赖其可观察性平台来支持和维护在生产中运行的应用程序。通过扩展覆盖范围以包括较低的环境(例如 DEV 和 QA),DevOps 管道可以使用Ansible等开源工具与部署生命周期期间发出的指标进行交互。

这意味着,当 DevOps 管道对环境进行更改时,可以创建Ansible Playbook来监视给定的一组指标,以便了解部署是否按预期运行。如果没有出现异常或错误,管道将继续运行。否则,当前任务将中止并恢复部署的先前状态。

因此,使用服务所有者和可观察性平台定义的指标集合,经理批准的需要就会减少。这是因为合并请求的批准是分析更改的地方。此外,通常会添加批准经理步骤,因为不存在更好的替代方案。更换经理审批步骤后,可以通过相同的 DevOps 管道触发到 Prod 的部署。

采用这种方法,变更单的状态可以反映自动化完成任务时的实际状态。示例雕像包括Created、To Be Reviewed、Approved、Started、In Progress和Completed(或Completed With Errors)。

下一代部署生命周期

通过消除 Toil 并通过管道引入 DevOps 自动化,可以创建下一代部署生命周期。

图 2. 下一代部署生命周期

在图 2 中,部署生命周期变得更小,不再需要审批经理角色。相反,可观测平台用于监控 DevOps 管道。

在下一代部署生命周期中,软件工程师在合并请求获得批准后执行合并到主步骤。从此时起,该过程的其余部分将完全自动化。如果在 CD 管道步骤期间发生任何错误,管道将停止并恢复之前的状态。

与图 1 相比,所有现有的 Toil 都已完全消除,团队可以认为合并到主事件是下一个生产版本的入口点。更令人兴奋的是,团队在采用此策略时将看到其承诺部署比率的改善。

粉碎不合理的阻拦者

在考虑下一代部署生命周期时,经常会出现三个常见的想法:

1. 在部署之前我们需要让企业知道

软件工程师应努力以不需要业务级批准的方式增强或更新服务。使用功能标志和版本化 URI 是如何在不影响现有客户的情况下实现自动化发布的示例。然而,传达计划的功能和修复以及预期的时间范围始终是一个好主意。

2. 经理应该知道将要部署什么

虽然这是一个公平的说法,但批准经理对更新的了解应该在冲刺计划阶段(或类似阶段)建立。一旦给定的一组工作开始,期望该工作将在给定的开发迭代期间完成并部署。像软件工程师一样,管理人员应该采用合并到主线最终导致部署到生产的思维方式。

3. 在将变更投入生产之前,至少应该有一个人批准变更

这是一个有效的语句,它实际上发生在合并请求阶段。事实上,下一代部署生命周期中剩余的批准是有充分理由的。当一名或多名审批者审查合并请求时,他们处于最佳位置(在最佳时间点)来审查和质疑正在完成的工作。此后,可观察性平台监控 DevOps 管道是否出现任何意外问题就更有意义。

结论

传统的开发生命周期通常包括人工审批和大量不可接受的工作。随着时间的推移,这种辛苦不仅会成为挫败感的根源,还会影响软件工程师的生产力和心理健康。团队应优先考虑消除其角色和职责中的辛苦工作,并使用 DevOps 管道并与现有可观察性平台集成来推动下一代开发生命周期。采用这种方法将使团队能够采用“合并到主线等于部署到产品”的心态。这样做的一个好处是,提交部署率将会提高。

三十年前,我发现了作为一名软件工程师的热情,三十年后,我仍然热爱成为一名软件工程师。事实上,我对未来的道路更加兴奋,由于 DevOps 自动化和劳力消除,不再需要人工审批。

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

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

相关文章

Goingpub国自然基金-免费查询

可进行年份、学部、项目类别等检索,支持生成主题词汇总分析报告。 最最最关键,免费,只需要你注册登录一下,防止被爬虫侵扰。 界面简单,实用,支持模糊搜索,包含最新2023年数据,共56…

Python异常值分析

异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问…

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(一)

回顾一下模型的生命周期 需要注意的是,在这个流程中,测试至少要参与的以下的活动: 离线的模型测试线上线下一致性测试数据质量测试模型的线上质量监控建模过程的功能/性能等测试 可以看出来测试人员需要做的事情其实不少,整个建模…

Python景区票务人脸识别系统(V2.0),附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

uniapp使用npm命令引入font-awesome图标库最新版本并解决APP和小程序不显示图标的问题

uniapp使用npm命令引入font-awesome图标库最新版本 图标库网址:https://fontawesome.com/search?qtools&or 命令行: 引入 npm i fortawesome/fontawesome-free 查看版本 npm list fortawesome在main.js文件中: import fortawesome/fo…

阿里云服务器可以干嘛?阿里云服务器八大用途介绍

阿里云服务器可以干嘛?能干啥你还不知道么!简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等,阿里云百科aliyunbaike.com整理阿里云服务器的用途: 阿里云服务器活动 aliyunbaike.com…

SQL Server语法基础:入门到精通

博客前言 在数据库管理的世界中,SQL Server无疑是一个重要的角色。无论是初学者还是经验丰富的数据库管理员,都需要对SQL Server的查询语法有深入的理解。本文将带领大家深入解析SQL Server的查询语法,并分享一些实用的技巧,帮助…

Redis 之集群模式

一 集群原理 集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。 集群由多个节点(Node)组成,Redis的数据分布在这些节点中。 集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从…

突破编程_前端_SVG(概述)

1 什么是 SVG SVG,全称可缩放矢量图形(Scalable Vector Graphics),是一种基于 XML(可扩展标记语言)的矢量图像格式。这种图像格式的主要特点是它描述的是矢量图形,而不是基于像素的位图图像。因…

基于 Vue3 + Webpack5 + Element Plus Table 二次构建表格组件

基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件 文章目录 基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件一、组件特点二、安装三、快速启动四、单元格渲染配置说明五、源码下载地址 基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件&#x…

【Java】maven是什么?

先看一下基本概念: ①Maven 翻译为"专家","内行"是跨平台的项目管理工具。 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 ②项目构建 项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报…

Matlab 修改图例顺序

对于使用 .m 文件绘制的图片,可以修改程序中图例的顺序来改变图片的图例。如果图片所对应的 .fig 文件已经存在,而且不便修改源程序,则可以通过如下方式来修改图例: step 1: 打开fig文件,然后点击绘图浏览器 step 2&…

PHP超级外链分发源码

源码简介 超级外链工具,是一款在线全自动化发外链的推广工具。使用本工具可免费为网站在线批量增加外链,大大提高外链发布工作效率,是广大草根站长们必备的站长工具。 搭建环境 PHP 5.6 安装教程 上传源码压缩包到网站目录并解压即可 首…

kali 渗透工具 - mestaploit

永恒之蓝漏洞的小知识: 黑客通过改造 永恒之蓝 制作 wannacry 制作病毒入侵高校内网。 mestaploit 攻击永恒之蓝流程: 使用模块 msfconsole配置required 模块参数运行,开始监听主机 msfconsole 主要模块 - 选择使用模块 search ms17_01…

百度富文本编辑器配置(vue3)

今天分享一下我做的项目里面的一个百度富文本的配置问题,安装配置流程以及如何解决的 1.首先是安装组件 # vue-ueditor-wrap v3 仅支持 Vue 3 npm i vue-ueditor-wrap3.x -S # or yarn add vue-ueditor-wrap3.x 2. 下载 UEditor UEditor 并不支持通过 npm 的方式…

爬虫入狱笔记——xx政府网站公开政策数据

最近在学习爬虫,做个笔记吧 今天爬xx政府网站-政策法规栏目的数据 咱们首先需要找到数据从哪里来,鼠标右键->检查(或者快捷键一般为F12)检查元素,搜索关键词 eg.【违法案例】 回车, 如果没有的话&am…

Java8关于Function接口

Java学习-Function接口 1 函数式接口简介和学习地址2 两种常见的函数式接口2.1 Runnable:执行接口,不接收参数,也无返回结果。2.2 Consumer:作为消费接口,接收一个参数,无返回结果。 3 初识3.1 定义Functio…

数据结构初阶:栈和队列

栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。…

报错:Directory“c:/Gowin/20240325 USB_3/impl/pnr”has null character.

问题说明 将工程从一个电脑拷贝到另外一个电脑,然后工程综合没有问题,布局布线时没有ERROR报出,但是就是不能进行布局布线,如下图: 解决方法: 将拷贝工程文件夹名字中的空格删除,然后重新布局…

昇腾Ascend之npu-smi工具的简单使用

一、参考资料 npu-smi工具 二、npu-smi工具的常用操作 信息查询(info) npu-smi info -t <type> -i <npu_id>查询所有芯片的AI CPU、control CPU和data CPU数量 参数描述-ttype: board, flash, memory, usages, sensors, temp, power, volt, common, health, p…