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

news2024/11/29 0:52:53

三十年后,我仍然热爱成为一名软件工程师。事实上,我最近读了威尔·拉森(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.coloradmin.cn/o/1576727.html

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

相关文章

222,完全二叉树的节点数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…

2024/4/2—力扣—二叉树的最近公共祖先

代码实现: 思路: 递归判断左子树和右子树,查找p或者q是否在当前节点的子树上 1,在同一子树上,同一左子树,返回第一个找到的相同值,同一右子树上,返回第一个找到的相同值 2&#xff0…

ES学习日记(十一)-------Java操作ES之基本操作

前言 此篇博客还是一些基础操作,没什么可写的,需要的同学直接抄作业进行测试就可以 上一节写了连接和测试新增操作,这一节写java操作ES的基本操作,也就是增删改查,在这里补充一点知识,我们之前用了指定的索引进行指定添加 有一个情况是,如果我们指定了…

git提交代码时报错,提不了

问题 今天在换了新电脑,提交代码时报错 ✖ eslint --fix found some errors. Please fix them and try committing again. ✖ 21 problems (20 errors, 1 warning) husky > pre-commit hook failed (add --no-verify to bypass) 解决 通过 --no-verify 解决&…

✌2024/4/3—力扣—最长回文子串

代码实现: 解法一:动态规划——回文子串 char* longestPalindrome(char *s) {int n strlen(s);if (s NULL || n 0 || n 1) {return s;}int dp[n][n];memset(dp, 0, sizeof(dp));for (int i n - 1; i > 0; i--) { // 从下到上for (int j i; j &l…

C语言面试题之判定字符是否唯一

判定字符是否唯一 实例要求 实现一个算法,确定一个字符串 s 的所有字符是否全都不同 实例分析 1、使用一个大小为 256 的bool数组 charSet 来记录字符是否出现过;2、遍历字符串时,如果字符已经在数组中标记过,则返回 false&a…

SpringCloud Alibaba Sentinel 创建流控规则

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第十四篇,即介绍 SpringCloud Alibaba Sentinel 创建流控规则。 二、基本介绍 我们在 senti…

腾讯视频号新玩法,有人已经“遥遥领先”了~

我是王路飞。 抖音的流量红利让用户看到了新的变现方式。 短视频、开直播、开店铺卖货、图文带货等等,都是依托于抖音这个平台去发展起来的。 而抖音的巨大成功,被吸引到的还有互联网行业巨头,比如腾讯。 而腾讯视频号的上线就表明了&…

智能网联汽车自动驾驶数据记录系统DSSAD数据元素

目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是:原来的仓库换了网址,原版网址不可用了。 解决方法如下: 方法一:查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

DIY可视化UniApp表格组件

表格组件在移动端的用处非常广泛,特别是在那些需要展示结构化数据、进行比较分析或提供详细信息的场景中。数据展示与整理:表格是展示结构化数据的理想方式,特别是在需要展示多列和多行数据时。通过表格,用户可以轻松浏览和理解数…

2024新版PHP在线客服系统多商户AI智能在线客服系统源码机器人自动回复即时通讯聊天系统源码PC+H5

搭建环境: 服务器 CPU 2核心 ↑ 运存 2G ↑ 宽带 5M ↑ 服务器操作系统 Linux Centos7.6-7.9 ↑ 运行环境: 宝塔面板 Nginx1.18- 1.22 PHP 7.1-7.3 MYSQL 5.6 -5.7 朵米客服系统是一款全功能的客户服务解决方案,提供多渠道支持…

深度学习理论基础(七)Transformer编码器和解码器

学习目录: 深度学习理论基础(一)Python及Torch基础篇 深度学习理论基础(二)深度神经网络DNN 深度学习理论基础(三)封装数据集及手写数字识别 深度学习理论基础(四)Parse…

能不能换DB吗?--抽象工厂模式

1.1 就不能不换DB吗? 都是换数据库惹的祸。 "我们团队前段时间用.net的C#来开发好一个项目,是给一家企业做的电子商务网站,是用SQL Server作为数据库的,应该说上线后除了开始有些小问题,基本都还可以。而后&#…

婴儿洗衣机买几公斤的合适?四大黑马婴儿洗衣机强势来袭

选择适合婴儿使用的洗衣机,是每个家长都关心的问题。在选择的时候,我们需要考虑一些因素,比如安全性、易操作性和洗涤效果等。同时,也要根据婴儿的年龄和需求来选择合适的洗衣机。婴儿洗衣机的出现,为宝妈们带来了极大…

2023年下半年中级软件设计师上午真题及答案解析

01 02 03 04 05 06 07 08 09 10 篇幅有限,私我获取免费完整 pdf文件

如何魔改 diffusers 中的 pipelines

如何魔改 diffusers 中的 pipelines 整个 Stable Diffusion 及其 pipeline 长得就很适合 hack 的样子。不管是通过简单地调整采样过程中的一些参数,还是直接魔改 pipeline 内部甚至 UNet 内部的 Attention,都可以实现很多有趣的功能或采样生图结果。 本…

JVM 全景图

今天我重新复习了一下 jvm 的一些知识点。我以前觉得 jvm 的知识点很多很碎,而且记起来很困难,但是今天我重新复习了一下,对这些知识点进行了简单的梳理之后,产生了不一样的看法。虽然 jvm 的知识点很碎,但是如果你真的…

创建型模式--1.单例模式【巴基速递】

1. 巴基的订单 在海贼世界中,巴基速递是巴基依靠手下强大的越狱犯兵力,组建的集团海贼派遣公司,它的主要业务是向世界有需要的地方输送雇佣兵(其实是不干好事儿)。 自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 &…

系统监测工具-tcpdump的使用

一个简单的tcpdump抓包过程。主要抓包观察三次握手,四次挥手的数据包 有两个程序:客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等,dstip地址端口指定抓取目的地址…