写点什么

6 种应避免的 DevOps 错误实践

2018 年 9 月 22 日

随着 DevOps 作为数字化转型过程中支柱地位的思想受到越来越多的认可,CIO 们对于了解 DevOps 与开源思想如何转变企业文化的热情也在不断升温。 DevOps 是一系列概念的组合,这些概念未必都是新出现的,但他们正在快速地带动技术社区的热情。只需看看市面上已经有多少这方面的书籍和资源就可以了解一二,而这些资源能够帮助你的 DevOps 启动与实践,使你进入 DevOps 的下一个阶段。

不过,仍然有许多人并不完全理解 DevOps 的意义,而对于 DevOps 不充分的认识与理解,使许多 DevOps 实践无法真正落地。本文列举了6 种最常见的错误,以及避免这些错误的方式,让你能够更顺利地开始 DevOps 之旅。

1. 设立一个独立的 DevOps 团队

软件组织有一个最常见的失误,就是创建一个全新的团队,让他们负担起整个 DevOps 的工作。对于开发与运维工作来说,让一个全新的团队负担起与所有人进行交流沟通的工作实在过于复杂。DevOps 的原意是 _ 改进整个软件开发过程中各个团队的沟通 _,包括安全、测试与数据库管理团队,而不仅仅是开发与运维方面的工作。如果你为实施 DevOps 设立了一个全新的团队,只会让事情变得更加复杂。

团队成功的秘诀在于简单化,我们应该专注于培养自动化、质量与稳定性思想的文化。打个比方,你可能需要让所有相关人员参与某个会议,在会议中讨论架构,或是在生产环境中发现的某些常见问题。在这样的场景下,每位与会者都需要意识到他们的工作会对他人产生怎样的影响。DevOps 的秘诀不是设立一个专门的团队,而是让整个组织作为一个 DevOps 团队进行决策。

2. 对于工具投入过多精力

在 DevOps 的启动过程中有大量的工具可以帮助你的实施,没必要在启动 DevOps 策略的初期将时间浪费在选择不同工具的争论上。你很快会发现,要为团队与组织流程找到正确是非常困难的,因为每个团队(开发、IT 运维、安全团队等等)都会为自己的 DevOps 实践选择特定的工具,哪怕这种工具会让他们与其他团队的沟通变得更困难。此外,总会有新的工具不断浮现,其中可能会有一些工具能够承担起与其他工具相集成的任务。

当然,你必须为敏捷软件开发、持续集成发布、版本控制等工作找到适合的工具。一旦缺乏这些工具,团队就难以发掘出在 DevOps 方面投入的精力所带来的最大价值。但是,如果仅是购买一些持续部署工具,或是将应用作为容器发布,是无法为组织实现 DevOps 转型的。

某些软件供应商可能会宣称能够为你的 DevOps 实践提供完美的工具,但请你以一个不可知论者的眼光来看待这种宣传,并牢记一点:没有任何工具能够完全满足你的所有需求。

3. 专注速度,却忽略了安全与质量

许多组织在 DevOps 实践中会将 CI/CD 策略作为一个重要部分,他们希望能够尽量缩短开发与部署新代码的时间。不过,DevOps 的实践者表示,以安全和质量为代价换取交付速度是一个巨大的错误。即使你能够更快地构建、测试,并将新的应用发布至生产环境,但如果这些应用不能像你期望中那样工作,又有什么用呢?

为了保障软件的高安全性与高质量,开发团队应该尽早让测试进入整个开发流程。更重要的是,能够在实际部署之前确认候选发布版本是能够进行持续交付的。

4. 创建过多的代码分支

在敏捷软件开发与 DevOps 实践中,软件(主干)应该始终保持可部署的状态,让开发人员至少每天都能够往主干分支,而不是特性分支提交代码。如果构建失败,在 10 分钟内就可以修复。如果有新的开发入职,也应当能够快速地在工作机器上安装一份类似于生产环境的代码。

对于熟悉传统瀑布式开发环境的开发者来说,打破他们使用分支的习惯或许很难,但控制分支的使用的确能够带来很多益处。如果你倾向于基于主干的开发方式,那么开发者就能够在一个具备最大连续性,单一的代码库上进行开发了。

Puppet 在 2017 年的 DevOps 现状 报告中表示:“根据我们的发现,在合并至主干之前,让分支与 fork 保持非常短的生命周期(少于一天),并且保证活跃的分支总数少于 3,这对于持续集成交付来说非常重要,并且能够带来更好的效率。因此,请做到每日都将代码提交至主干或 master 分支。”

DevOps 为你处理开发者机器上与生产环境中的代码之间的关系提供了许多自动化的能力。如果代码库产生过多不同的版本,会给整个 DevOps 过程的复杂度带来几何级数的增长。

5. 忽略安全团队的参与

DevOps 并不仅是将开发与运维团队整合在一起这么简单,这是一种持续性的软件开发与自动化过程,其中包括了安全、审计与合规等因素。许多企业常犯的一个错误就是没有从一开始就遵循他们的安全实践。

事实上,在一次 CA Technologies 的问卷中显示,安全问题是 DevOps 实践所面临的最大障碍,有 38% 的回复选择了这一项。同样,在 Puppet 的一次问卷中也显示出,高效能的 DevOps 团队 “在处理安全问题上,比起低效能的实践者所花费的精力减少了 50%”。很明显,这些高效能团队已经摸索出一套方法,能够有效地满足安全目标,并且在软件流程的早期就构建出扎实的安全基础。

DevOps 实践者需要理解整个流程,对控制能力进行评估,并且发现风险所在。最终而言,安全始终是 DevOps 实践当中的一部分,正如 DevSecOps 实践一样。举例来说,如果你的生产环境遇到任何安全问题,那么都应当通过安全团队使用的工具,在你的 DevOps 流水线中解决这些问题。DevOps 与 安全实践必须严格遵守,不能有任何妥协。

6. 没有为文化的改变做好准备

当你拥有 DevOps 实践的工具之后,很可能会遇到一个更基本的挑战:如何让你的团队利用这些工具实现更快的开发、自动化测试、持续交付以及监控。你的开发与运维文化是否已经为这些变化做好了准备?

打个比方,敏捷方法论通常会要求你每周一次,甚至每日一次发布新代码,这会导致对敏捷实施的各种尴尬、缺陷,乃至错误。而在 DevOps 策略中,你也会面临到同样的概念性问题。这就像是把一辆已经耗光汽油的车拖到一条新的马路上一样困难。

为了避免发生这样的问题,应当计划一个切换的过程。为开发与运维团队预留足够的时间,让他们能够消化这些新的实践。请确保让他们能够动手体验这些新的流程与工具。总之,在拥抱 DevOps 之前,请确信你已经让 Dev 与 运维的文化做好充分准备。

总结

一旦你克服了这些挑战,开始全面实施 DevOps 实践,你的组织就能够充分享受到更高的敏捷性、更好的客户满意度、更高的团队士气,提升你的生产力。以上这一切会让你的业务发展更加顺利。

英文原文由 Opensource.com 的 Daniel Oh 提供

查看英文原文 6 DevOps mistakes to avoid

感谢张婵对本文的策划和审校。

2018 年 9 月 22 日 18:201448
用户头像

发布了 428 篇内容, 共 150.6 次阅读, 收获喜欢 22 次。

关注

评论

发布
暂无评论
发现更多内容

nginx 平滑升级、以及导入第三方模块

sinsy

nginx 升级

vscode + vim : vscode 全键盘使用方案

lmymirror

vim vscode Spacemacs

懵了!一口气问了我18个JVM问题!

yes的练级攻略

面试 JVM

架构师训练营 -week09-作业

大刘

极客大学架构师训练营

区块链交易所软件,数字货币场外交易系统搭建

13530558032

区块链币支付系统开发搭建,USDT支付平台源码

13530558032

K3d vs Kind 谁更适合本地研发

郭旭东

Kubernetes k3s kind

奥卡姆剃刀 - 如无必要,勿增实体

石云升

认知 奥卡姆剃刀 简约

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

小Q

Java 学习 编程 架构 面试

史上最通俗Netty入门长文:基本介绍、环境搭建、动手实战

JackJiang

网络编程 Netty nio 即时通讯 IM

深圳区块链钱包系统开发,区块链钱包app源码

13530558032

为什么有的专科程序员比本科程序员薪资高?他们之间有多大的区别?

Java架构师迁哥

Java读取Excel/CSV格式的科学计数法问题

团子粑粑

Java Excel csv

爆火的低代码,到底是真需求还是伪风口?

ToB行业头条

低代码

学习笔记:架构师训练营-第八周

四夕晖

这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

鄙人薛某

Java 并发编程 AQS 并发 ReentrantLock

接口测试并不只是测试参数和返回值

测试人生路

接口测试

7面阿里,最后一面居然挂在了JVM上面!狠下决心恶补JVM知识

Java架构之路

Java 程序员 架构 面试 编程语言

阿里P8大牛整理的300页图解网络知识+计算机底层操作系统

Java架构之路

Java 编程 程序员 架构 面试

备战2021年金三银四,阿里P8面试官梳理的2020年999道大厂高频Java面试题(附答案)

Java架构之路

Java 编程 程序员 架构 面试

来不及解释了,快上车!LR.NET开发平台助力企业信息互联

雯雯写代码

Android热修复之DexPatch介绍

阿里云金融线TAM SRE专家服务团队

android

C++调用Go方法的字符串传递问题及解决方案

华为云开发者社区

c++ 内存 代码

奋力准备一个月成功进字节,来看一下我都看了哪些资料做了哪些准备

小Q

学习 编程 程序员 架构 面试

这4个Java异常框架,很多人竟然还不知道

比伯

Java 编程 架构 面试 计算机

区块链IM即时社交通讯系统开发,区块链社交平台源码搭建

13530558032

惊喜!Alibaba架构师终于发布“微服务架构与实践”文档

Crud的程序员

架构 微服务

适用初学者的5种Python数据输入技术

华为云开发者社区

Python 数据 函数

go-zero 如何扛住流量冲击(一)

Kevin Wan

go microservice go-zero goctl

【应用运维】公司业务迭代迅速,运维如何高效进行应用发布?

嘉为蓝鲸

可视化 PaaS 运维自动化 部署与维护 发布

《深入理解java虚拟机》- java内存区域

never say never

JVM笔记 堆内存

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

6种应避免的 DevOps 错误实践-InfoQ