中拔出溜的公司如何实施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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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

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

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

请注意&#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…

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

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

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…

伤感视频素材哪里找?五大平台助您深情表达

大家好&#xff01;制作视频时&#xff0c;找到合适的伤感视频素材可以极大地增强作品的情感表达。那么&#xff0c;伤感视频素材哪里找呢&#xff1f;今天&#xff0c;我将为大家介绍五个能提供优质伤感视频素材的平台&#xff0c;让您的视频作品更加动人。 蛙学网&#xff0…

2023ICPC网络预选赛 ( 2 ) (2) C.Covering【2-SAT、前后缀虚拟节点区间连边】

C.Covering 题意 给定一个长度为 n n n 的正整数数组 a a a&#xff0c;现在要从中选择一些下标&#xff0c;满足&#xff1a; 对于每个下标 i i i&#xff0c; i i i 和 i − 1 i - 1 i−1 至少 有一个被选对于所有选择的下标&#xff0c;任意两个下标 i , j ( i ≠ j…

Android适配平板屏幕尺寸

一、划分手机和平板 人为判断方法: 大于6英寸的就是平板。小于6英寸的都是手机 平板尺寸&#xff1a; 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件&#xff0c;我们可以追加新的资源目录到你的Android项目中。命名规范&#xff1a; 资源名字-限制符 l…

C++进阶03 模板与群体数据

听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1f40b;模板 &#x1f40b;8.…

Vue2 —— 学习(六)

一、Vue 脚手架 &#xff08;一&#xff09;介绍 Vue 脚手架是 Vue 官方提供的标准化开发工具 &#xff08;开发平台&#xff09; 脚手架版本最新版本 是 4.x 文档可以查看 http://cli.vuejs.org/zh/ 就是vue 官网文档中 的 vue.cli command line interface &#xff08;…

Python 爬虫基础——http请求和http响应

写本篇文章&#xff0c;我认为是能把自己所理解的内容分享出来&#xff0c;说不定就有和我一样有这样思维的共同者&#xff0c;希望本篇文章能帮助大家&#xff01;✨✨ 文章目录 一、 &#x1f308;python介绍和分析二、 &#x1f308;http请求三、 &#x1f308;http响应四、…

Python项目2 数据可视化

生成数据 数据可视化 指的是通过可视化表示来探索数据&#xff0c;它与数据挖掘 数据挖掘 紧密相关&#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表 示的小型数字列表&#xff0c;也可以是数以吉字节的数据。 漂亮地呈现数据关…

【论文笔记】Planning-oriented Autonomous Driving

原文链接&#xff1a;https://arxiv.org/abs/2212.10156 1. 引言 目前的自动驾驶工业界通常为不同任务部署不同的模型&#xff0c;但优化的孤立性会导致模块之间的信息损失、误差积累和特征不对齐。 一种更好的设计是将各种任务整合为多任务学习&#xff0c;即为共享的特征提…

设计模式之责任链模式讲解

概念&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有对象处理它为止。最匹配的场景应该就是逐层审批的模式。 责任链模式只有两个角色&#xff…