中拔出溜的公司如何实施DEVOPS

虽然推进起来很艰难,但在这类公司也并非一无是处:只要让各方尤其是领导曾看到了成效,大范围铺开很容易,你也非常容易因此变得出众。

0. 标题

      • 1. 中拔出溜公司的特点
      • 2. 循序渐进
        • 2.1 从研发团队开始
        • 2.2 先CI(持续集成)
        • 2.3 再CD(持续部署)
        • 2.4 告警/监控
        • 2.5 最后是自动化测试,
        • 2.6 不要教条
      • 3. 后记
      • 4. 相关

1. 中拔出溜公司的特点

按照本系列文章的风格,开篇咱们依然是针对本文讨论的主题,针对性说明下中拔出溜公司的特点:

  1. 业务场景要求低,CRUD式研发,无专业运维。 这些特点在这个链接里已有详尽介绍。
  2. 业务研发压力大。以上背景下公司想要盈利肯定不会做什么小而美的产品,广撒网接项目、项目周期短、业务功能点多、非功能性需求很少考虑等是其主要特点。
  3. 项目管理处于蛮荒阶段,缺乏过程管理,项目负责人的认知和态度对于项目最终质量的影响巨大。
  4. 项目团队里对于软件工程理解严重缺乏。普遍信奉人多力量大,大力出奇迹。

在项目管理上,中拔出溜公司既没法像小公司那样快速掉头,直接重新从零开始去适应市面上的成熟流程;也没法像大公司那样——人员认知到位,直接从上往下压,并且有足够的人力来支撑自研和内部持续推进。所以如果真正想要落地DEVOPS,过程远比想象中的要曲折 —— 问题永远不会是出在技术了。

2. 循序渐进

对于这种彻彻底底的自下而上,我们需要遵循"晓之以理,不如诱之以利"的基本指导思路,仔细衡量,持续监测所推进的每一步改良,做到灵活机动。

这里需要额外说明一句:多年以来,以我个人的观察,很多这类公司,即使是做到总监级别(我这里说的是职级),也只习惯于在一言堂的情形下做决定,完全没有经历过复杂场景下的决策博弈和方案落地。直接表现上就是思维方式很简单:我是不会允许xxx,我要求他们必须xxx。

2.1 从研发团队开始

原因很简单,研发人员属于是这个团队里最有能力,也是最有希望改变这一切的。

彼此如齿轮咬合在一起的团队协作里,我们要先将某个齿轮的转速提上来,并且持续保持并优化下去,逐步打通整个链条,最终实现全面变革。

当前这一切并不简单,要不我也不至于从18年做到现在,现在政府项目都开始软件过程管理的投标了,我这依然是成绩寥寥;所谓"起大早赶晚集",现在都已经不是晚不晚的问题,是这集都要散了。

2.2 先CI(持续集成)

对于毫无基础的团队,推荐从CI开始。这一步改动非常小,而且对于研发人员的观感体验上也是有利无害,所以非常容易争取到相关支持,为进一步的改良打下良好基础:

  1. CI解决了打包电脑环境各异导致的诡异问题。早几年我亲眼见证研发人员本机jdk1.7打包,然后在jdk1.8的服务器上部署,花费半个团队大半天时间去调查。
  2. 同时搭配集中的制品版本库实现打包制品版本的统一管理和交流,历史追溯。这一步最简单的实现方式就是Nginx+操作系统自身的文件系统,如此可以快速让研发和测试/技术支持看到效果,争取支持。
  3. 上一步的基础上,接着出现的需求就会是"制品版本说明"的问题,因为打包和制品存储下载的统一,各方也看到了其中的好处,接下来你就可以开始借机推进需求管理的标准化,以及代码提交的标准化,并且在此基础上最终实现需求说明,提交代码,打包制品三者之间的彼此关联绑定,这个过程的全自动化将大幅降低沟通成本。
2.3 再CD(持续部署)

在上一步见效,有部分主动性较高的组员愿意参与进来,实现自运转之后,马上要进入落地环节的就是CD了。

在前一阶段CI让相关成员感受到CI的好处之后,接下来你只需要稍微演示下CD,其进展会比过往快不少。不过有一些需要注意的:

  1. 对于本文论及的公司类别,有一部分概率其部署服务器并非我们通常认知里的linux环境,而是Windows-Server(好吧,我所在的就是。至于原因嘛,其实很简单,运维要求低,可以以更低的成本招聘到人),这种情况下的CD就不要轻易变更 —— 想着我先切到Linux下,然后再实施CD。那样很大概率会失败 —— 都能够选择Windows-Server作为部署服务器了,说明研发以及相关的测试/售后团队对Linux的熟悉程度等于没有,在这种情况下贸然变更,将带来一系列的问题,这将阻止原有的工作流程,对于软件工程管理基本概念都缺失的团队,从上到下都会逼着你退回来。
  2. 想明白了上一条,接下来你要做的就是在现有工作流程上小心翼翼地迈出第一步。这里以笔者的经验是将CD过程拆解为三个步骤:推送到目标服务器,解压,最后是自动化部署。
    2.1 之所以要做拆分,一来是为了实现小步快跑,通过小幅优化来减小所引入的风险,避免失败打击各方对我们的信心。以我个人的经验,对于部署包较大的团队,这一步改进就已经能够争取到售后/测试团队的支持。
    2.2 虽然拆分为了三个步骤,但其实将制品推送到目标服务器和解压这两者是可以合并实行的。
    2.3 最后一步的"自动化部署"可以在前两者稳定一到两个月之后再推进,不要过于心急。

针对使用到的工具,如果你的部署环境大部分还真是Windows-Server的,那我这里推荐一下Ansible。

这一步的成功除了可以进一步收获到各方的信任和支持外,还有很多可能意料之外的好处:

  1. 首先是人工操作的低级错误将被杜绝。
  2. 部署目录结构的标准化。相较于过往每次报告问题时起手三板斧的拉据问题”系统部署在哪里?“、"部署的是什么版本"等,CD有助于让各方形成共识,消除这部分无价值的琐事操作,尽快进入问题修复环节。
  3. 这一步可以将我们心心念念的服务器的控制权收回来,如此的好处多多:比如部署环境的一致性、可控制性、变更一致性和及时性、资源管理和分配等等。
  4. 搭配之后将要推动的监控/告警,我们将最终实现各方对于服务器的无感知化 —— 他们不需要关心系统被部署在哪里,不再被这类琐事耽误哪怕一秒钟,只需关心好业务需求是否实现即可。
2.4 告警/监控

在上面这两步推进之后,你会发现还有一个相当关键的问题 —— 相关人员还是有登录部署服务器的需求,这除了会带来配置飘逸等某些莫名其妙的问题外,也在导致你始终无法对服务器进行自由掌控——典型如上面所说的Windows-Server作为部署服务器时,相关问题解决很难找到解决方案,不像Linux那样一搜一大把。

关于监控这一块,这里给出我的个人理解:把监控细分两大块:a)自身内部环境下的监控,b)生产环境下的监控:

  1. 关于后者,可以参考本人前两天发表的中拔出溜的公司如何落地监控体系。注意,中拔出溜公司的监控以够用就行,针对本地化部署的软件,数量多,规模小;此背景下监控上一堆高大上的,那最终只会造成越俎代庖 —— 好处一点没看到,一堆研发被逼成半拉运维。
  2. 自身内部的监控可以稍微激进一些。整一个集中部署的监控服务端(例如Skywalking,CAT,Zabbix,Prometheus,Grafana等),然后在各个小组中试点。注:自身内部可以作为监控的培训基地,技术试验场而存在。
  3. 关于监控的推荐,我依然是延续之前的思路:Loki + TraceId基本可以解决95%的问题。重点是不断优化这个方案,让公司内部的产品全部接进来。
2.5 最后是自动化测试,

对于中拔出溜公司内的大部分团队而言,不大会走到这一步,所以这里我就不再阐述一些细节问题。

以我个人的见证,这个流程进行实际的常态化使用,今年已经是第三个年头了,从一开始的"测试用例都没有"情况下被领导逼着强行启动自动化测试,到后来通过跟着领导思路走让他看到这样确实不大行,然后反过来从基础测试用例迭代开始,一步步走过来可谓步步惊心 —— 各方的不配合,领导认知含糊等等,每一步都能让你的放弃看着是那么理直气壮。

2.6 不要教条

以上只是我在实践中最终走通,然后通过反向总结出来的基本流程。

这里我想要强调一下的是:不要教条主义,你应该依据实际情况进行对应的调整,以上步骤也不是严格的先后顺序。以我自身为例,CI,CD,监控这三块其实在整个流程中都有持续并行推进,根据所参与的团队不同推荐并实际参与不同方案的落地。主打的就是"哪怕往前推半步也行,你们觉得好,下次愿意听进去我半句话就算没白忙活"。

3. 后记

给别人做信息化的软件公司,自己内部信息化却一言难尽。一个为了让机器代替人工操作的职业,自己的工作流程里却有着大量的人工操作痕迹。每每想到这些真是五味杂陈。

但是不管怎么样,既然选择了就不要轻易放弃。

最后用我数年前看过的《DevOps实践指南》里的结束语"行动起来"来作为本篇的结束。
在这里插入图片描述
《DevOps实践指南》-- 行动起来

4. 相关

  1. 中拔出溜的公司如何落地监控体系
  2. 【DEVOPS】现状篇
  3. 【DEVOPS】技术团队角色分工
  4. 【DEVOPS】制品版本打包发布的规范化
  5. DevOps系列实践
  6. 高级研发的基本素养
  7. 传统软件行业中技术团队的发展(现状篇)
  8. 传统软件行业中技术团队的发展(团队破局篇)
  9. 传统软件行业中技术团队的发展(个人破局篇)
  10. 敏捷中国十八年目睹之怪现状

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

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

相关文章

2024年第十七届“认证杯”数学中国数学建模网络挑战赛D题思路

D题 AI绘画带来的挑战(本题仅限专科组和爱好者组选用) 2023 年开年, ChatGPT作为一款聊天型AI工具,成为了超越疫情的热门词条;而在 AI 的另一个分支——绘图领域,一款名为 Midjourney(MJ)的软件,热度完全不亚于ChatGPT。AI绘画技术可以模仿设计师的风格和技巧,自动生…

中介者模式:简化对象间通信的协调者

在面向对象的软件开发中,中介者模式是一种重要的行为型设计模式,用于降低多个对象间通信的复杂性。通过提供一个中心化的对象来处理不同组件之间的交互,中介者模式使得组件间不必显式引用彼此,从而使其松散耦合、更易于维护。本文…

【日常记录】【CSS】生成动态气泡小球

文章目录 1、分析2、实现 1、分析 核心有两点&#xff0c;通过这两个不一样就可以实现每个小球的颜色、动画时间不一致 给每个元素都设置一个css 变量 bgc 用于控制每一个小球的颜色给每个元素都设置一个css 变量 duration 用于控制每一个小球的时间 2、实现 <!DOCTYPE ht…

Python连接星环数仓取数

有公众号群的小伙伴问我,有没有实现python连接星环数仓取数的代码,刚好有用,就做了一下分享。可能别的小伙伴也有需求,故分享到公众号中,感兴趣的小伙伴可以跟着实现一下。之前的文章分享了python连接sql取数和实现自动化发邮件代码,感兴趣的朋友可以到阿黎逸阳的代码公众…

STM32H7的Cache学习和应用

STM32H7的Cache学习和应用 啥是Cache&#xff1f;Cache的配置配置 Non-cacheable配置 Write through&#xff0c;read allocate&#xff0c;no write allocate配置 Write back&#xff0c;read allocate&#xff0c;no write allocate配置 Write back&#xff0c;read allocate…

在IntelliJIDEA中如何将依赖包打入项目中?

在IntelliJIDEA中将依赖包打入项目主要有以下几种场景和步骤&#xff1a; 一. 对于 Maven 项目&#xff1a; 在 pom.xml 文件中正确声明所需的依赖。IDEA 会自动从 Maven 仓库下载这些依赖。 构建项目时&#xff0c;默认情况下 Maven 不会将依赖包直接打进 JAR/WAR 文件中&am…

科软24炸穿了,25还能冲吗?

25考研&#xff0c;科软必然保持大热 不是吧兄弟&#xff0c;明眼人都能看出来&#xff0c;科软以后不会出现大冷的局面了&#xff0c;除非考计算机的人减少&#xff0c;因为科软简直是叠满了buff&#xff0c;首先科软的专业课是22408&#xff0c;考的是数学二&#xff0c;这就…

北斗导航 | 北斗三号区域短报文服务解析

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 北斗三号区域短报文服务解析 1、引言2、北斗三号区域短报文服务原理与改…

腾讯云人脸服务开通详解:快速部署,畅享智能体验

请注意&#xff0c;在使用人脸识别服务时&#xff0c;需要确保遵守相关的法律法规和政策规定&#xff0c;保护用户的合法权益&#xff0c;并依法收集、使用、存储用户信息。此外&#xff0c;腾讯云每个月会提供一定次数的人脸识别调用机会&#xff0c;对于一般的小系统登录来说…

C++类和对象(四)——类的实现、const、explicit、static

1. 日期类的实现&#xff08;包括前置和后置&#xff09; Date.h #pragma once #include<iostream> #include<assert.h> using namespace std;class Date { public:bool CheckInvalid() const;Date(int year 1, int month 1, int day 1);bool operator<(co…

7. Spring Boot 创建与使用

经过前面的六篇文章&#xff0c;Spring Framework的知识终于大致讲完了&#xff0c;但是Spring AOP还没提到&#xff0c;个人认为Spring AOP更适合放在Spring MVC之后再讲解&#xff0c;而讲解Spring MVC前先学习Spring Boot的目的也是为了在学习Spring MVC的时候直接使用Sprin…

【云原生篇】K8S部署全面指南

部署Kubernetes&#xff08;K8s&#xff09;有多种方式&#xff0c;可以根据组织的需求、基础设施和资源来选择最合适的部署方法。以下是一些主流的Kubernetes部署方式&#xff1a; 1. 手动部署 kubeadm&#xff1a;Kubernetes官方提供的工具&#xff0c;可以帮助你快速部署和…

C#中计算矩阵的逆可以使用数学库

在C#中计算矩阵的逆可以使用数学库&#xff0c;比如MathNet.Numerics。这个库提供了丰富的数学函数&#xff0c;包括线性代数运算。以下是一个使用MathNet.Numerics计算矩阵逆的简单示例&#xff1a; 首先&#xff0c;你需要安装MathNet.Numerics库。你可以通过NuGet包管理器来…

项目管理软件评测:选择合适软件是关键

在过去&#xff0c;中小企业项目管理沿用的是office全家桶&#xff0c;用到后面项目由简单变复杂&#xff0c;项目资源越来越庞大&#xff0c;项目成员越来越多&#xff0c;项目管理问题日益凸显。好用的项目管理软件是化解问题的好方法&#xff0c;好用的项目管理软件是什么样…

蓝桥杯22年第十三届省赛-选数异或|暴力、线性dp

题目链接 5.选数异或 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a; 重要结论&#xff1a;a^bx可得a^xb 暴力做法&#xff1a; 每次遍历给定区间的元素&#xff0c;将出现的元素建一个表表示这个数在区间里出现过&#xff0c;同时查这个元素a的a^x是否在表里&#xff0c;出现…

uwsgi 配置

uwsgi 官方文档&#xff1a;Python/WSGI 应用快速入门 — uWSGI 2.0 文档 安装uwsgi: pip install uwsgi 在【项目】目录下&#xff0c;manage.py 同级目录创建&#xff1a; myweb_uwsgi.ini 文件 &#xff08;名字随便起&#xff09; myweb_uwsgi.ini 内容配置&#xff…

C语言中的编译和链接

系列文章目录 文章目录 ​编辑 系列文章目录 文章目录 前言 一、 翻译环境和运行环境 二、 翻译环境 2.1 编译 2.1.1 预处理 2.1.2 编译 2.1.2.1 词法分析 : 2.1.2.2 语法分析 2.1.2.3 语义分析 2.1.3 汇编 2.2 链接 三、运行环境 前言 在我们平常的写代码时&#xff0c;我们很…

基于SpringBoot+Vue的健身器材用品网站(源码+文档+部署+讲解)

一.系统概述 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决各种问题&#xff0c;必录德健身器材用品网展现了其蓬勃生命力和广阔的前景。与此同时&#…

Vue3整合wangEditor(富文本编辑器框架) 以及提供存储渲染方案

目录 概述 Vue3整合wagnEditor 图片的上传 图片的删除 文章存储 文章渲染 概述 实现功能&#xff1a;管理端使用富文本编辑器编写文章内容&#xff0c;将编辑好的文章存入数据库或服务器中&#xff0c;前端应用读取存储的文章内容作展示。 本文章能提供 ①Vue3整合wangEdi…

2024年第十七届“认证杯”数学中国数学建模网络挑战赛B题思路

B题 神经外科手术的定位与导航 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要将颅骨打开一个(或几个)圆形窗口,将病变部位暴露在术野中。但当病变部位较深时,就必…