DevOps 方法论漫谈(五):DevOps 工程师要会什么——一个非主流的能力模型

市面上关于 DevOps 工程师技能的讨论很多,但你去看那些文章,大多是把你需要学的工具罗列一遍:Jenkins、Docker、K8s、Ansible、Terraform……然后告诉你“学完这些你就 DevOps 了”。这种说法不能说错,但格局太小了。工具会过时,但思维不会。这篇文章想从一个更根本的角度聊聊:一个 DevOps 工程师到底应该具备什么样的能力。

一、工具是会过时的,但方法论不会

举个例子:五年前最火的 CI 工具可能是 Jenkins 配各种插件,三年前变成了 GitLab CI 的 YAML 配置,现在又在谈 GitHub Actions、Argo Workflows。你学得过来吗?你每换一家公司,工具栈可能完全不一样。

但不管工具怎么变,有些事情是不变的:

  • 代码提交之后要自动构建
  • 构建之后要自动测试
  • 测试通过后要自动部署
  • 部署之后要监控,出问题要回滚

你不会因为换了工具就改变这些流程。所以,一个真正成熟的 DevOps 工程师,核心能力不是“精通 Jenkins”,而是理解交付流程中每个环节要解决什么问题,以及如何用工具去支撑它

下面我根据自己的理解,把 DevOps 工程师的能力分为四个层次。这不是什么“官方认证”的能力模型,仅供你参考。

二、第一层:工具使用能力——入行的敲门砖

这是最基础的一层,也是面试必考的部分。你需要能熟练使用主流的 DevOps 工具:

  • 代码管理:Git(分支、合并、变基、cherry-pick),GitHub/GitLab 的平台操作。
  • CI/CD:至少精通一个 CI 引擎(Jenkins 是最通用的选择),能写 Pipeline 脚本。
  • 构建工具:至少懂一个(Maven/Gradle/npm),知道依赖管理、插件机制。
  • 容器化:Docker 的镜像构建、网络、存储、多阶段构建。
  • 部署与编排:K8s 的基本概念(Pod、Service、Deployment、ConfigMap),能写基本的 YAML。
  • 脚本语言:Shell 是必须的,Python 或 Groovy 至少会一个。

这一层的东西,是你能干活的底线。但仅仅停留在这个层次,你就是一个“工具使用者”——今天让你用 Jenkins 你就用 Jenkins,明天换成 Argo 你就蒙了。

三、第二层:流程设计能力——从“会用”到“会设计”

这是从一个执行者走向设计者的关键一步。

流程设计能力指的是:给定一个团队的业务形态和技术栈,你能设计出适合他们的交付流程。

你需要能回答这些问题:

  • 这个团队应该用什么样的分支策略?Trunk-Based 还是 Git Flow?
  • CI 流水线应该有几条?哪些场景触发哪条流水线?
  • 不同环境的部署策略是什么?开发环境可以自动部署,生产环境要不要人工审批?
  • 测试策略怎么分层?什么测试在 CI 跑,什么在 CD 前跑?
  • 代码审查的卡点设在哪里?MR 审批流程怎么配?

这些问题没有标准答案,取决于团队的规模、业务的风险等级、发布的频率。能针对具体场景做出合理的流程设计,比精通某个工具高级得多。

实践中的建议:不要一上来就设计一个“完美流程”。 先从一个最小的可工作流程开始(代码提交 → 构建 → 测试 → 手动部署),然后根据团队反馈逐步加卡点、加自动化。流程是演进出来的,不是设计出来的。

四、第三层:工程素养——T 型知识结构

到了这一层,你要能在回环的每个环节和对应的人有效对话。

注意,这里说的是“能对话”,不是“比他更专业”。比如:

  • 和研发聊:你能理解他们的分支策略、代码审查流程,能给出 CI 侧的配置建议。
  • 和测试聊:你能理解测试分层、覆盖率策略,能把测试流程接入流水线。
  • 和运维聊:你能理解网络拓扑、负载均衡、故障转移,能和他们一起制定部署和回滚方案。

这种能力来自对回环每个环节的深入理解。你不必是每个环节的专家,但你至少要知道每个环节的核心问题和基本解法。这就是所谓的 T 型人才——在 CI/CD 这个纵深领域有深度,同时对上下游有足够的广度。

怎么培养?多和不同角色的人聊天,多看他们怎么干活。 研发提交代码你看一遍,测试写用例你看一遍,运维部署你看一遍。看多了,你就能把整个回环在脑子里串起来。

五、第四层:软技能——推动变革的能力

这是最难的一层,也是区分好工程师和优秀工程师的分水岭。

DevOps 本质上是组织变革。你要推动团队改变工作方式:原来手工发布的,现在要自动化;原来不写测试的,现在要写;原来出了事互相甩锅的,现在要向前看。这些改变,每一项都会遇到阻力。

你需要的能力包括:

  • 沟通和说服:你不能说“必须这样做”,而要说“这样做能带来什么好处”。用数据说话——自动化之后发布效率提高了多少、故障恢复时间缩短了多少。
  • 渐进式推进:不要试图一下子改变一切。先找一个痛点最小的环节着手,做出效果,用事实赢得信任,再推下一步。
  • 同理心:理解不同角色的难处。研发不愿意写测试,不是因为他们懒,可能是因为排期紧、或者不知道怎么写。运维不愿意自动化,可能是因为担心失控。找到真正的原因,才能解决真正的障碍。

这一层的能力很难在书本上学到,是在一次次“碰壁”和“想办法”中磨出来的。

六、关于学什么工具的务实建议

虽然前面一直在讲“思维比工具重要”,但具体到学习路径上,总要有个抓手。我的建议是:

选定一个主流技术栈,学深学透。

  • CI/CD:Jenkins——它是最经典、最通用的,企业中占比最高。理解了 Jenkins 的 Pipeline as Code 思想,切换到其他 CI 工具只是语法不同。
  • 容器:Docker + Kubernetes——目前的事实标准,短期内不会变。
  • 构建:取决于你接触的技术栈,Java 就学 Maven/Gradle,前端就学 npm/webpack。
  • 脚本:Shell + Python

不需要贪多,精通一套比浅尝十套有用得多。

七、总结

回顾一下四层能力模型:

  1. 工具使用——能干活。
  2. 流程设计——能设计。
  3. 工程素养——能贯通。
  4. 软技能——能推动。

很多人的成长路径是:入行时聚焦第一层,工作两三年后开始做第二层,五年以后逐渐进入第三层和第四层。这个过程不能跳级——你不能连 Jenkins 都不会配就开始设计流程,也不能连流程都设计不好就去推动组织变革。

但如果你的目标只是“熟练使用 Jenkins、Docker、K8s”就满足了,那确实也能找到工作,只是走得不会太远。DevOps 最有价值的部分,永远在工具的上面一层。

下一篇是这系列的最后一篇,我们来聊一个有趣的角度:有品位的开发做 DevOps,和普通运维做 DevOps,有什么本质不同。

每天前进一小步,就是一个新的高度!