干了16年技术管理,亲手带过两个从瀑布到敏捷的转型团队,也参与过三个大型企业的DevOps落地项目。这一路下来,我最深的体会是:如果你只推敏捷开发而不碰DevOps,那你大概率正在给自己挖一个迟早要塌的坑。不是危言耸听,是血淋淋的教训。我们先看一组真实数据:根据DORA(DevOps Research and Assessment)2023年发布的报告,精英绩效团队在部署频率上达到按需部署的水平,变更前置时间小于1天,变更失败率低于5%,平均恢复时间小于1小时。而低绩效团队呢?部署频率是每月甚至每季度一次,变更前置时间超过6个月,失败率高达60%以上,恢复时间动辄几天甚至几周。差距不是一点点,是数量级的鸿沟。
但我今天不想跟你重复DORA报告里那些已经被引用烂了的数据。我想聊的是这组数据背后那个更本质的问题:为什么敏捷开发做了好几年,交付速度提不起来,质量也没见好转?答案经常一句话就能讲清楚,你的研发流程只敏捷化了前半段,后半段还是瀑布式的瓶颈。需求能两周迭代,代码能每天提交,但到了测试环境申请要等三天,部署要手工跑脚本,生产环境一出问题还得几个组开战情室定位半天。这就好比把高速公路修到村口,结果村里面的路还是土路,你马力再大也跑不起来。

所以今天这篇文章,我想跟你掰扯清楚一个核心观点:敏捷开发解决的是“做什么”和“怎么快速验证”的问题,DevOps解决的是“怎么安全快速地送到用户手里”和“怎么在生产环境持续跑稳”的问题。这两件事本质上是同一枚硬币的两面,缺一面就是残币。我见过太多团队在敏捷转型上投入巨大,站会开得很规范,看板拖得很漂亮,回顾会也聊得热乎,但半年过去发布频率还是月更甚至季更。为什么?因为发布管道是堵的,基础设施是手工的,监控是碎片化的,运维和开发之间还隔着一道无形的墙。这种“半截子敏捷”比不做敏捷还糟糕,它让团队跑得精疲力竭,却始终看不到交付端的成果转化。
一、核心结论:敏捷开发必须和DevOps一起实施,否则就是半成品
我先把这个结论说透。2001年敏捷宣言诞生的时候,那17位大佬在雪鸟滑雪场讨论的核心问题是“如何更好地开发软件”,重心落在需求响应和团队协作上。但软件不只是写出来的,更是跑起来的。2010年之后,随着持续交付、基础设施即代码、容器化、微服务这些技术实践的成熟,行业逐渐意识到:开发出来的功能和用户真正用起来的功能之间,还隔着一条巨大的鸿沟,这条鸿沟的名字叫“交付与运维”。
为什么这个结论值得你重视?因为我经历过反面教材。2015年我带一个电商中台团队时,敏捷转型做得风生水起,看板上的故事点流速提高了40%,站会每天15分钟搞定,团队凝聚力肉眼可见地上升。但到了Q3大促前夕,一次核心服务升级需要变更网络配置,运维团队用传统流程评估了5天,开发这边等得干瞪眼。最后加班加点赶上线,结果线上出问题后回滚脚本没提前验证,恢复时间花了整整7个小时,当天订单损失超过200万元。那次事故之后我们深刻反思:敏捷开发没有DevOps做后盾,就像一辆只有加速踏板没有刹车的跑车,要么你不敢开到真正需要的速度,要么你早晚得出事故。
从行业趋势来看,这个结论也在被反复验证。Gartner在2023年的报告中指出,到2027年,75%的软件工程组织将使用平台工程来提供自助服务能力,而平台工程的核心目标正是支撑敏捷团队实现自主、快速、安全的交付。IDC的数据显示,将DevOps实践与敏捷开发结合的企业,其新功能上线时间平均缩短40%-60%,缺陷率降低30%-50%。这些数字不是理论预测,而是大量企业实践后的统计结论。

所以我的核心判断就一句话:如果你正在规划或正在推进敏捷转型,请把DevOps相关的工程能力建设同步纳入计划。不要等到敏捷跑起来发现交付堵住了再回头补课,那样成本更高、阻力更大。这个判断基于16年的实战经验,也基于我亲眼见过、亲手处理过的十几个案例,成功的和不成功的都有,规律非常清晰。
二、你到底遇到了什么问题?三种典型的“敏捷但交付不了”的真实场景
在展开具体的方法论之前,我想先带你回顾三种最常见的“病症”。如果你发现自己团队符合其中一条或几条,那今天这篇文章你需要逐字读完。
1. 迭代速度很快,发布依然很慢
这是最高发的症状。团队严格按照Scrum框架运作,两周一个Sprint,Sprint Review结束时开发工作确实做完了,代码也合并到主干了。但发布呢?需要运维团队手动审批、手动打包、手动部署,中间还涉及防火墙策略调整、SSL证书更新、数据库脚本执行等一系列手工操作。开发两周干完的活,发布流程又花了一周甚至更久。而且因为发布周期长,多个Sprint的内容不得不合并发布,版本包越滚越大,风险越高,测试范围越广,形成恶性循环。
我在2020年接触过一个做金融SaaS的团队,他们的研发团队规模大约120人,Scrum已经跑了两年多。说实话,站会的质量和看板的维护都做得很到位,产品负责人的优先级排序也很有章法。但他们的发布频率始终卡在月更的水平,不是不想发得更快,而是发布准备流程太冗长。具体来说:每次发布前需要手动整理50多项检查清单,包括环境一致性验证、依赖版本核对、配置文件对比、数据库迁移脚本校验等等,全靠运维小组的三个人人工操作,一旦遇到异常还得拉开发介入定位,平均每次发布准备耗时4个工作日。这还不算生产上线后做回滚验证的时间。
问题根源很清楚:开发侧的敏捷实践和运维侧的工程能力严重脱节。开发把价值流优化到两周以内,但交付流还停留在季度级的响应速度。这种脱节不是靠加强沟通、多开几次协调会能解决的,它本质上是工程能力缺口,需要在CI/CD、自动化测试、基础设施即代码等层面做系统性建设。
2. 线上质量总出问题,回滚成为常态
第二种典型场景更加致命。敏捷开发要求快速迭代,但快速迭代如果缺乏工程质量的自动化保障,很容易演变成“快速制造缺陷”。我曾经接手过一个项目,敏捷转型之后的第一个季度,需求吞吐量确实提高了35%,但生产环境的严重故障数同比上升了60%。每次回滚都是一次信任危机,业务方开始质疑敏捷开发到底靠不靠谱,甚至有人提出要回到瀑布模式。
深入排查后发现几个关键问题:第一,单元测试覆盖率不到30%,大部分代码靠手工测试验证,而手工测试的节奏根本跟不上两周迭代的速度;第二,没有预发布环境的自动化回归测试,很多集成问题到生产环境才暴露;第三,发布过程缺少灰度机制,一有问题就是全量影响,回滚操作又依赖手工脚本,经常出现“回滚失败”的二次故障。这些问题每一个都和DevOps实践缺失直接相关,自动化测试、持续集成验证、灰度发布、可观测性监控,这些恰恰是DevOps工程能力体系的核心模块。
3. 开发与运维之间隔着一堵越来越高的墙
第三种场景更隐蔽但破坏力同样巨大。在传统模式下,开发和运维各有各的KPI,开发关注新功能上线,运维关注系统稳定,这两套KPI天然存在冲突。敏捷开发要求频繁变更,而运维的天然职责是控制变更风险,矛盾在频率提升之后会被急剧放大。我见过最极端的案例是,运维团队直接给开发团队规定了一周只能发布两个窗口,每个窗口不超过1小时,超出窗口一律拒发。开发那边站会开得再高效也没用,因为交付的最后100米被人为设了路障。
这个问题表面看是协作问题,但根子还是在机制和工具层面。当运维团队缺乏自动化手段来降低变更风险时,他们只能用流程控制来做风险兜底,这是理性选择,但也是次优选择。真正的解法是:让运维从“审批者”转变为“平台提供者”,通过建设自助化的发布平台、自动化的安全检查策略、可观测的监控体系,把变更风险控制从人治变成机制治。这个转变,就是DevOps理念中“将运维能力左移到开发侧”的核心思想。

以上三种场景,如果你在其中看到了自己团队的影子,那接下来的内容就是给你准备的行动参考。
三、拆解三个最常见的误区,以及为什么它们让你付出昂贵代价
在推进敏捷与DevOps协同落地的过程中,我观察到业界普遍存在三个认知误区,而且很多团队正在为这些误区付出实实在在的成本。逐一拆解。
1. 误区一:“先做好敏捷,再慢慢补DevOps”
这是最常见也最要命的一个误区。很多CTO和研发总监跟我说:“我们现在先把Scrum跑顺,团队协作规范了,站会回顾都养成习惯了,再引入CI/CD和自动化运维。”这个想法听起来合理,实际执行下来几乎没有成功先例。
为什么?因为敏捷实践和DevOps工程能力之间存在双向增强效应,分开推进等于自废武功。当团队在Scrum框架下把迭代节奏压到两周或更短时,测试、部署、发布环节的压力骤增。如果这些环节仍然依赖手工操作,瓶颈会迅速暴露。而瓶颈一旦暴露,团队的自救反应往往不是建设DevOps能力,而是放慢迭代速度,反正发不出去,卷那么快干嘛?你会发现,单独推敏捷的团队,在一开始的热情消退之后,很容易退回到3-4周的迭代周期,因为那是手工交付流程能承受的极限。这就是“敏捷回退”现象,背后的推手不是团队不努力,而是交付管道承载力不足。
更务实的做法是什么?敏捷和DevOps要同期启动,或者至少把CI/CD的自动化管道在敏捷转型的第一个季度内搭建完成。具体来说,在第一个Sprint规划会上,除了用户故事拆分和任务估算,还应该把“搭建自动化构建和部署流水线”作为一个技术故事放进Sprint Backlog。我在PingCode服务过的一个客户就是这么做的:他们在敏捷转型启动的第一个月,就同步用PingCode打通了GitLab的代码托管和Jenkins的CI/CD管道,确保每个Sprint结束时至少有自动化构建和单元测试验证的能力。这样跑了一个季度后,部署频率从月更提升到周更,团队对敏捷的信心反而更足了,因为交付成果更快被验证。

2. 误区二:“上了Jenkins/GitLab CI就等于做了DevOps”
这个误区在中小团队尤其普遍。很多团队告诉我说“我们已经做DevOps了”,深入了解之后发现就是搭了一套Jenkins,配了几个自动编译打包的Job,偶尔触发一下自动部署。严格来说,这叫“局部自动化”,离真正意义上的DevOps还有不小的距离。
DevOps不是一个工具清单,而是一套贯穿“计划-编码-构建-测试-发布-部署-运维-监控”全链路的能力体系。我习惯用一张能力成熟度自评表来衡量团队的真实水平,包含7个核心维度:
| 能力维度 | L1(初始级) | L2(管理级) | L3(定义级) | L4(量化管理级) | L5(优化级) |
|---|---|---|---|---|---|
| 版本管理 | 无统一版本管控 | 使用Git但分支策略混乱 | 统一分支策略,代码评审规范 | 分支策略与发布策略联动 | 主干开发+特性开关,按需发布 |
| 持续集成 | 手工编译打包 | 定时自动构建 | 每次提交触发构建+单元测试 | 构建管道包括质量门禁 | 构建数据驱动持续优化 |
| 自动化测试 | 全手工测试 | 少量单元测试 | 单元测试覆盖≥60%,接口自动化 | 分层自动化测试,性能测试集成 | 测试数据驱动,AI辅助用例生成 |
| 持续交付/部署 | 手工部署 | 脚本化半自动部署 | 一键部署到预发布环境 | 生产部署自动化,支持灰度 | 按需部署,自动回滚 |
| 基础设施管理 | 手工配置服务器 | 使用配置脚本 | 部分IaC化(基础设施即代码) | 全面IaC,环境一致性保障 | 不可变基础设施,容器化编排 |
| 监控与可观测性 | 无系统监控 | 基础资源监控告警 | 应用级监控+日志聚合 | 全链路追踪+业务指标监控 | AIOps智能告警与根因分析 |
| 团队协作与文化 | 开发运维各自独立 | 有协作意识但流程割裂 | 跨职能团队,共享部分职责 | 开发运维共担SLO指标 | 持续改进文化,无指责复盘 |
建议你用这张表认真自评一次。我在多个团队做过这个评估,最典型的分布是:版本管理在L3-L4,持续集成在L2-L3,但自动化测试、基础设施管理和监控往往只有L1-L2。DevOps不是单点工具的叠加,而是全链路能力的均衡提升。某一个维度特别强、其他维度特别弱,整体的交付效能还是被最短板限制。
3. 误区三:“DevOps做好了,Ops的人可以裁掉”
这话我听过不止一次,每次都让我后背发凉。有些管理者把DevOps误读为“开发自己搞定运维”,进而推导出可以减少运维编制。这种理解不仅错误,而且危险。
DevOps的本质含义是开发和运维在流程、工具和文化上深度融合,而不是让运维消失。恰恰相反,运维团队在DevOps时代的角色变得更加关键,他们需要从执行重复手工操作的“操作员”转型为设计和维护自动化平台的“平台工程师”或“SRE(站点可靠性工程师)”。这个转型对运维人员的能力要求更高了,不是更低:他们要懂编码、懂架构、懂CI/CD管道设计、懂可观测性策略、懂故障演练和混沌工程。用PingCode服务过的一个金融科技客户的话来说:“以前运维是守着服务器,现在是写Terraform模板和Kubernetes配置文件,技术门槛提升了不止一个档次。”
所以正确的组织策略是:保留并升级运维团队,让他们从“审批和执行岗”转为“赋能和支持岗”,用工程化手段把运维能力产品化输出给开发侧。具体怎么做,我会在第七部分展开详细说明。
四、我总结的一个判断框架:敏捷+DevOps协同成熟度模型
讲了三个误区之后,我想给出一个自己的判断框架,帮助你在实际操作中判断团队当前处于什么阶段、下一步应该聚焦什么。这个框架是我在过去十年里逐步总结出来的,未必严谨到学术标准,但在实战中相当好用。
我把敏捷与DevOps的协同成熟度分成五个阶段:
1. 阶段一:各自为战(Siloed)
特征:开发团队按Scrum或Kanban运作,但交付流程完全依赖运维团队的响应。测试环境和生产环境的部署权限全部掌握在运维手里。每次发布都是一次“交接”,交接过程中信息损耗严重。发布频率通常为月更或更低。一旦线上出问题,开发和运维各自查各自的日志,搞不清楚是代码问题还是环境问题,经常互相甩锅。
在这个阶段的团队,最急需的不是去开更多的站会,而是先把CI/CD的基本管道建起来,哪怕只是自动化构建和单元测试这一步,都能产生立竿见影的效果。
2. 阶段二:局部自动化(Partially Automated)
特征:有Jenkins或其他CI工具在跑自动构建,但测试和部署仍是手工操作。部分环境配置用了脚本,但环境一致性问题经常出现。部署频率可以做到双周或周更,但每次发布仍然紧张兮兮,需要安排驻场值班。运维开始接触一些自动化工具,但整体上还是以手工运维为主。
大量团队就卡在这个阶段。突破的关键是把自动化从构建环节向测试和部署延伸,尤其要解决测试环境自动拉起和销毁的能力。
3. 阶段三:管道打通(Pipeline Connected)
特征:CI/CD管道覆盖了从代码提交到预发布部署的完整链路。自动化测试(单元测试+接口测试+部分UI测试)集成在管道中,任何提交都会触发自动化验证。基础设施开始全面IaC化,环境创建和销毁都通过代码控制。部署频率可以做到一周多次。监控体系初步建立,能够主动发现应用层面的问题。
这个阶段是真正的拐点。一旦团队达到这个成熟度,迭代速度和交付速度之间的落差基本被抹平,敏捷开发的效能开始真正释放。
4. 阶段四:度量驱动(Metrics-Driven)
特征:团队基于DORA指标或其他效能度量体系来持续优化流程。灰度发布、特性开关、A/B测试等高级发布策略成为常态。监控体系升级为可观测性体系,能够通过指标、链路、日志三维数据快速定位问题。SLO/SLI(服务水平目标/服务水平指标)体系建立,开发和运维共享可靠性目标。故障复盘形成文化,每次事故都会产生具体的改进Action Item。
5. 阶段五:持续优化(Continuously Optimizing)
特征:交付效能指标持续改善,团队具备自我进化的能力。混沌工程、AIOps等前沿实践融入日常。开发可以自助完成从提交到上线、监控、回滚的全流程,运维更多扮演平台能力建设者和架构顾问的角色。部署频率达到按需水平,变更失败率控制在极低水平。

这个五阶段模型的价值不在于贴标签,而在于帮你看清楚两件事:第一,你现在在哪里;第二,通往下一阶段的关键瓶颈是什么,应该优先投入资源攻哪个方向。我建议每个季度和团队一起对着这个模型做一次自评,把它作为回顾会的固定议题之一。
五、以PingCode服务的大中型团队为例:协同落地的三个关键环节
理论框架讲清楚了,接下来我想用一个具体的观察样本来说明白,在实际的大中型团队中,敏捷开发和DevOps的协同到底怎么落地。我选择的样本是在PingCode平台上运行的一批中大型企业客户(团队规模100人以上,研发人员占比通常超过60%)。这些客户有一个共性:他们都在PingCode上管理敏捷开发流程(需求管理、迭代规划、任务跟踪、评审回顾),同时也用PingCode打通了代码仓库和CI/CD管道,实现了从需求到交付的端到端追溯。
通过对这些客户交付数据的持续观察,我提炼出三个最关键、也最容易做对的协同环节。
1. 需求拆分的粒度直接决定交付管道的效率
这是很多人忽略的一个关键点。敏捷开发中的用户故事拆分方式和DevOps中的CI/CD管道设计之间存在深度耦合。如果用户故事拆得过粗,一个故事需要多个模块同时改动,合并冲突频繁,自动化测试的回归范围变大,构建时间拉长,整个管道效率下降。反之,如果拆得过细,大量微小提交涌入管道,构建排队时间变长,部署频率虚高但每次部署的业务价值很小。
PingCode上表现最好的团队普遍采用这样的拆分惯例:一个用户故事的规模控制在1-3个开发任务,每个任务对应一个可独立构建和测试的代码变更单元。这种粒度确保了每次提交的变更范围可控,CI管道可以在10分钟以内完成构建+单元测试+接口测试的完整验证,从而支撑高频提交和高频部署。我在数据后台观察到,那些能把单次构建时间控制在10分钟以内的团队,其每日部署次数是构建时间超过30分钟团队的3倍以上。这背后就是需求拆分粒度在起作用。

2. 迭代规划会上必须把“交付任务”纳入Sprint Backlog
传统的Scrum迭代规划会只讨论功能开发任务,不考虑部署、监控配置、回滚脚本编写这类交付侧的工作。但我在PingCode上观察到一种更成熟的做法:把“交付任务”作为Sprint Backlog的固定组成部分,和用户故事并行管理。典型的交付任务包括:
- 为本次迭代的新功能编写自动化测试用例(接口测试和端到端测试)
- 更新CI/CD管道配置以支持新的服务或依赖
- 编写数据库迁移脚本并验证回滚流程
- 配置新功能的监控指标和告警规则
- 更新基础设施即代码模板(如Terraform模块)
这些任务同样需要估算工作量、分配责任人、在每日站会上跟踪进展。PingCode的项目管理模块支持为任务打标签分类,开发任务和交付任务可以清晰区分,同时在迭代概览页面上统一展示进度。我见过一个120人的SaaS团队用这种方式跑了6个月之后,他们的“生产就绪”时间(从代码写完到具备安全上线条件的时间)从平均4天压缩到了8小时。不是因为他们写代码更快了,而是因为交付侧的工作被提前纳入计划,不再积压到最后手忙脚乱。
3. Sprint Review要演示的不只是功能,还有交付管道指标
这是更有争议但也更有价值的一个建议。传统Sprint Review是向产品负责人和利益相关者演示已完成的功能,回答“我们做出了什么”。但是PingCode上实践比较深的团队会在这个会上多做一个动作:用2-3分钟快速回顾本Sprint的交付管道指标。具体包括:
- 本迭代的部署次数和部署成功率
- CI管道的平均构建时间和通过率
- 代码评审的周转时间(从提交PR到合并的平均耗时)
- 如果有线上问题,展示MTTR(平均恢复时间)的变化趋势
为什么要在Review会上过这些数据?因为产品负责人和业务方需要理解:交付速度的背后是工程能力的支撑,而工程能力需要持续投入来维护。如果只展示功能不展示交付指标,业务方会默认“写得快就该发得快”,一旦出现延迟就觉得是开发效率问题。而当你把交付管道指标也透明化之后,业务方会逐渐理解,比如构建时间突然从8分钟涨到25分钟,可能是因为最近引入了大量第三方依赖,需要花时间做依赖治理和构建优化,这不是开发效率问题,而是技术债问题。
PingCode的Insight模块可以自动汇聚这些交付数据并生成趋势看板,Review会上打开就能用,不需要额外准备材料。这个小小的机制改进,对拉齐开发和业务之间的认知差距帮助很大。
六、六个关键实践:从“做敏捷”到“敏捷能真正交付”的具体路径
接下来进入实操部分。基于前面的框架和案例观察,我总结出六个关键实践,按照推荐的实施优先级排列。每个实践都不只是“怎么做”的教程,网上这方面的内容已经太多了,我更想讲清楚的是为什么这个实践在敏捷+DevOps协同中不可替代,以及在你的具体场景下怎么判断优先级。
1. 主干开发 + 特性开关:让“随时可发布”成为常态
传统Git Flow提倡用feature分支开发,开发完成后再合并到develop分支,经过测试再合并到master分支。这个模式在发布频率低的时候没问题,但当你想做到每日部署甚至按需部署时,分支合并冲突就变成巨大的瓶颈。主干开发的核心思想是所有开发人员直接向主干提交代码(或者通过短生命周期的短分支快速合入),通过特性开关来控制未完成功能的可见性。
我在一个150人团队实践主干开发的经历让我印象深刻。刚开始推的时候阻力巨大,很多资深开发认为这是在“放弃版本管理的安全性”。但我们花了两周时间建立了两道防线:一是每次提交必须通过自动化测试门禁,不通过的直接打回;二是建立了特性开关管理平台,开发可以自助创建和销毁开关。两个月之后,合并冲突的频率下降了70%,CI管道的排队时间从平均40分钟降到12分钟,团队的部署频率从周更提升到每日3-5次。那位最初最反对的资深架构师后来在回顾会上说了一句让我很感慨的话:“不是主干开发不安全,是我们以前的测试和开关能力不足以支撑主干开发的安全性。”这句话点出了问题的本质:主干开发的安全性前提是自动化和特性开关能力达标,两者必须同步建设。
2. CI/CD管道设计:不是“能跑就行”,而是“跑得快才算数”
很多团队CI搭建完成就以为大功告成,但忽略了管道性能这个关键维度。一个构建需要40分钟的CI管道和一个构建只需8分钟的CI管道,对开发体验和交付效率的影响天差地别。40分钟的等待让开发在提交代码后去做别的事,上下文切换带来效率损耗,而且反馈太慢会导致“一次提交大量代码”的倾向,反而降低代码质量。
分享一个具体可操作的管道优化框架,我把它总结为“四步法”:
(1)分层并行:把管道切分成多个阶段,独立阶段并行执行
例如,单元测试、代码风格检查、安全扫描可以并行跑,而不是串行排队。这个优化立竿见影,通常能把总时间缩短30%-40%。
(2)增量构建:只构建和测试变更的部分
对于大型单体仓库或者微服务架构,每次全量构建非常浪费。通过依赖分析识别出真正受影响的模块,只对这些模块执行构建和测试。
(3)缓存策略:合理使用构建缓存
依赖包、编译中间产物、测试数据等都可以缓存,避免每次都从零开始。
(4)管道健康度监控:把构建时间和成功率作为度量指标
每周回顾管道数据,识别性能退化趋势并及时干预。

3. 基础设施即代码:消灭“环境不一致”这个头号杀手
“在我这儿能跑啊”,这句话可能是开发和运维之间最常见的冲突台词。环境不一致导致的问题,消耗了无数团队的宝贵时间,也严重破坏了开发和运维之间的信任关系。IaC(基础设施即代码)通过代码来定义和管理基础设施配置,从根本上解决了环境一致性问题。
实施IaC的时候,我有一个建议:不要一上来就追求“把所有东西都写成代码”,而是从最高频、最容易出错的环境配置开始。典型的切入顺序是:
- 先搞定开发环境和测试环境的自动创建与销毁:这解决了“申请测试环境等三天”的典型痛点
- 再把生产环境的配置纳入代码管理:确保生产环境的每次变更都有记录、可审计、可回滚
- 最后推进不可变基础设施:生产环境不允许手工修改,任何变更都必须通过代码重新构建和部署
工具选型上,Terraform在基础设施层表现稳定,Ansible在配置管理上简单好用,Kubernetes在容器编排领域目前是事实标准。选什么工具不是最关键的决定,最关键的决策是下定决心、明确时间表、指定负责人,把IaC作为一个正式的技术项目来推进。这一点我是有深刻教训的:以前带过一个团队,觉得IaC是“运维的事”没有刻意推动,结果环境一致性问题持续了整整两年,累积的人力浪费我后来粗略估算超过300人天。
4. 自动化测试策略:在速度和覆盖度之间找到平衡点
测试自动化是CI/CD管道能够高效运转的前提,但同时也是最容易走弯路的领域。最常见的问题有两个:一是测试覆盖率太低,管道形同虚设;二是测试脚本写得太多太慢,反而拖累管道性能。
我推荐使用经典的“测试金字塔”模型来设计分层策略,同时根据自己团队的实际情况做适配调整:
- 单元测试:占总测试量的60%-70%,目标是覆盖核心业务逻辑,执行时间控制在5分钟以内
- 接口/集成测试:占总测试量的20%-30%,验证模块间交互,执行时间控制在10分钟以内
- 端到端测试:占总测试量的5%-10%,只覆盖核心用户旅程,执行时间不做硬性限制但通过并行和筛选控制总量
特别提醒:不要追求100%的代码覆盖率。我在不同团队反复验证过,当单元测试覆盖率从30%提升到65%时,缺陷逃逸率下降很明显;但从65%再往上提升到85%时,大量的测试用例是在覆盖边角情况,边际收益递减非常严重。合理的目标是核心业务逻辑覆盖率75%-85%,整体覆盖率60%-70%,把省下来的精力投入到接口自动化和可观测性建设上。

5. 可观测性体系:不是“出问题了查日志”,而是“在用户感知到之前就发现问题”
监控和可观测性这两个词经常被混用,但它们的逻辑有本质区别。监控是“我知道可能出什么问题,所以我盯着这几个指标”,可观测性是“系统暴露足够丰富的信息,让我能够快速定位甚至预测未知的问题”。在敏捷高频交付的场景下,可观测性建设的重要性怎么强调都不过分。
具体来说,一个合格的可观测性体系需要覆盖三个支柱:
- 指标:系统性能、业务指标、错误率、延迟分布等量化数据,用于发现异常和趋势分析
- 链路追踪:一个请求在多个服务间的完整调用链,用于定位性能瓶颈和故障根因
- 日志:结构化的应用日志,用于深入分析具体问题
实施路径上,我建议分三步走:第一步,先把APM(应用性能监控)和集中日志平台搭起来,这两样解决80%的日常问题;第二步,引入分布式链路追踪(如Jaeger、SkyWalking),解决微服务架构下的根因定位难题;第三步,建立SLO/SLI体系,用业务视角定义可靠性目标,让监控不只是技术团队的工具,而是业务方也能理解的可靠性仪表盘。
6. 价值流可视化:把端到端交付效率当成团队的核心度量
最后一个实践是我在近三年才真正重视起来的。敏捷开发管的是“从需求到开发完成”这一段的价值流,DevOps管的是“从开发完成到用户使用”这一段的价值流。如果把这两段拼起来做端到端的价值流度量,你会发现很多意想不到的洞察。
PingCode的价值流分析功能可以自动识别从需求创建到生产部署完成的完整时间线,包括各个环节的耗时和等待时间。我见过一个典型案例:一个团队的价值流数据显示,从需求提出到开发完成平均7天,但从开发完成到生产部署平均9天,中间卡住最久的是“等待测试环境”和“等待安全评审”两个环节。如果没有端到端的可视化,团队可能一直以为瓶颈在开发环节,想着怎么让开发写得更快,但实际上真正的问题是测试环境供给和安全检查流程的效率。
所以我现在的建议是:每个季度至少做一次完整的价值流分析,把发现的瓶颈作为下个季度DevOps建设的优先级依据。这个动作本身成本很低(在PingCode上几分钟就能生成报告),但它能确保你的工程能力建设始终对准真正的短板,而不是盲目追新工具。
七、不同团队规模和组织形态下的行动取舍
我知道读这篇文章的读者,所在的团队规模、业务形态、技术栈、组织架构各不相同。一刀切的建议不现实,也帮不到你。所以这一部分我按照几种典型情况给出差异化的行动建议,你可以根据自己的实际情况对号入座。
1. 创业公司(10-50人研发团队)
核心矛盾:资源有限,又要快速验证业务,没时间也没人手做重型的工程能力建设。
行动取舍:
- 优先做:把CI管道跑起来(GitHub Actions或GitLab CI的免费额度够用),搭配基本的单元测试覆盖率(目标50%就行)。用容器化统一开发、测试、生产环境,消除“在我机器上能跑”的问题。上云的话直接用云厂商的PaaS服务,减少基础设施管理负担。
- 可以缓:暂不搞IaC(规模小、环境少,手工管理还扛得住),完整的可观测性等团队到50人以上再说(先用云厂商自带的监控+日志服务对付着),特性开关如果不做A/B测试可以先不建。
- 一个忠告:哪怕只有10个人,也不要走“开发写完直接扔给运维”的老路。让开发自己负责部署,运维(如果有)负责提供平台支持。这个习惯养成了,团队长大之后会省掉巨大的转型成本。
2. 中型企业(50-200人研发团队)
核心矛盾:业务复杂度上升,微服务化趋势明显,环境一致性问题和交付瓶颈开始集中爆发。组织内部开始出现开发和运维的职能分化,协作摩擦增多。
行动取舍:
- 优先做:IaC全面铺开,消灭环境不一致这个最大痛点。搭建完整的CI/CD管道,关键指标(构建时间、部署成功率、变更失败率)开始度量。可观测性体系建设提上日程,至少做到应用级监控+日志聚合。推行主干开发+短分支策略,减少合并冲突。
- 可以缓:混沌工程、AIOps等前沿实践暂不跟风。灰度发布如果不是核心业务可以先用手工分批的方式替代。平台工程团队可以先不建,运维团队用现有编制过渡转型。
- 一个提醒:这个阶段最容易掉进的坑是“工具采购驱动”,以为买了一套工具就等于做成了DevOps。工具是手段不是目的,先把流程理顺,再选工具匹配流程。
3. 大型企业(200人以上研发团队,多业务线)
核心矛盾:组织复杂度高,多条业务线技术栈可能不同,统一标准和保持灵活之间存在张力。安全合规要求严格,发布审批流程容易成为瓶颈。
行动取舍:
- 优先做:建立平台工程团队,为各业务线提供统一的自助化交付平台(内部开发者平台IDP)。PingCode这类工具在这个规模下发挥最大价值,统一的需求管理和交付管道管理,跨团队的效能度量,端到端的价值流分析。建立SLO/SLI体系,将可靠性目标纳入团队考核。
- 可以缓:不需要强制所有业务线使用完全相同的技术栈和工具链,允许在平台之上做适度定制。全量推广某种实践(如主干开发)之前先在一条业务线做试点,收集数据后再决定是否推广。
- 一个观察:大型企业推进DevOps最大的阻力通常不是技术,是组织墙和KPI冲突。建议先在一条业务线或一个项目上做出标杆案例,用数据说话,再逐步推广。推广过程中CTO级别的持续背书至关重要。

八、写在最后:敏捷和DevOps从来不是二选一,而是同一场进化
回到这篇文章的标题,《敏捷开发,DevOps必须跟上》。这不是一句口号,而是我用了16年时间、在不同规模、不同行业的团队里反复验证过的判断。
敏捷开发回答了“如何更快地发现正确的需求”,DevOps回答了“如何更快更安全地把正确的需求交付到用户手中”。这两个问题从来就是一个整体,只不过在方法论演进的过程中被分成了两个章节来讨论。但在实战中,你必须同时回答这两个问题,缺一个就不可能做到真正的“又快又好”。
所以,如果你正在推进敏捷转型,我给你的下一步行动建议非常具体:
- 本周之内,和团队核心成员开一个专题讨论会,用第四部分的五阶段模型做一次自评,明确你们当前在哪个阶段、最大的瓶颈在哪里。
- 本月之内,把自评发现的瓶颈转化为1-2个具体的改进项目,写进下个Sprint的Backlog,指定负责人和完成标准。
- 本季度之内,打通从代码提交到自动部署到测试环境的完整管道,确保至少做到“每次提交自动构建+自动测试+自动部署到测试环境”。这是敏捷+DevOps协同的最小可行能力基线。
- 半年之后,回顾部署频率、变更失败率、平均恢复时间这三个核心指标的变化趋势,用数据告诉团队和组织:我们走在正确的路上。
最后说一句掏心窝子的话。敏捷开发和DevOps都不是目的,目的是让技术团队能够更从容地应对业务的不确定性,用更短的反馈周期、更低的试错成本不断接近正确的解决方案。工具会变,实践会演进,但这个底层逻辑不会变。你现在踩的每一个坑、做的每一次改进尝试,都是在这条路上积累的宝贵经验。别怕走得慢,怕的是停下来或者走错方向而浑然不觉。
期待你的团队也能实现“敏捷开发+DevOps”的真正协同,让交付速度和质量不再是二选一的难题。
常见问题解答(FAQ)
1. 敏捷开发中,DevOps到底在什么时候开始介入?
我们团队刚转型敏捷,产品经理催着每两周一个迭代,但每次发布都像打仗一样:手动部署、环境不一致、线上故障得等运维通宵排查。我想知道,DevOps是不是应该从第一个迭代就拉进来?还是等敏捷跑稳定了再上?
我的经验是:DevOps必须在第一个迭代就介入,但角色定位要巧妙。我曾在一个20人的产品团队做技术负责人,最初我们以为敏捷就是产品+开发自嗨,结果到了Sprint 3,代码合并冲突频繁,手动打包经常漏配置项,导致上线回滚。
后来我们强制把一名资深运维嵌入Scrum团队,她负责写Dockerfile、建CI/CD流水线,并在每日站会上同步构建状态。一个关键判断:不能等“稳定”再上DevOps,因为敏捷的快速迭代会放大运维债务。
具体做法是:在Sprint 0就花两天搭建最小化的Jenkins pipeline + 测试环境容器化,后续每个迭代只允许通过自动化流水线发布。这样避免了传统“先开发后运维”的孤岛,也避免了“运维变成瓶颈”的失控。这个决策让团队从第4个迭代开始实现每周发布一次,部署失败率从30%降到5%。
对比同期另一位朋友带团队,他们跑完整整6个Sprint才引入DevOps,结果光回溯4个版本的配置差异就花了三周。结论:别等,在第一个Sprint就把DevOps当成用户故事的一部分来规划。
2. 用Jira和GitLab管理敏捷流程,再加个Jenkins就是DevOps了吗?
我买了Jira旗舰版,也照着教程搭了GitLab CI,为什么感觉还是手忙脚乱?是不是工具没选对?到底什么算真正的DevOps落地?
工具只是表面,真正的DevOps是文化、流程和度量三位一体的变革。我曾经被老板要求“三个月内完成DevOps转型”,我一开始也迷信工具堆叠:Jira同步需求、GitLab做MR、Jenkins跑构建、SonarQube扫描代码、Artifactory存制品。
结果跑了一个月,大家抱怨“太多工具要填状态”“流水线失败要等十分钟才能重试”“测试环境还是手工部署”。我踩的坑在于:没有先建立共同的交付指标。后来我强制团队每天看三个数字:部署频率、变更前置时间(从代码提交到上线)、变更失败率。
并重写了流水线,每个MR必须包含单元测试+集成测试,失败则自动回滚,同时Jira的状态流转必须与GitLab的MR状态联动。真正的转折是:我让团队把“运维工作”也写成用户故事纳入Sprint backlog,比如“为支付服务添加自动扩缩容”。
这样DevOps不再是游离在外的“基础建设”任务,而是可规划的迭代内容。对比我见过的一家金融科技公司,他们用了和我們一样的工具,却因为没做这一步,半年后CI/CD流程形同虚设,部署依然靠ssh登录手动操作。
只有当你把交付质量和速度作为团队OKR,并且愿意花时间打磨Pipeline反馈回路时,工具才算发挥了价值。
3. Scrum的Sprint回顾会议上,讨论DevOps问题会不会跑题?
我们Sprint回顾经常变成吐槽大会:开发说运维环境慢,运维说开发乱改配置。作为Scrum Master,我该不该把DevOps问题单独拿出来开会?还是应该在回顾会里花时间讨论?
不仅应该讨论,而且应该把DevOps痛点作为回顾会的高优先级议题。我当过4个团队的Scrum Master,早期我也认为回顾会只聚焦“需求-开发-测试”闭环,结果DevOps相关的问题永远累积到下个Sprint。
后来我改变了回顾会的结构:先把上一Sprint的“构建失败次数”“部署耗时”“恢复服务时间”三个数据贴在白板上,再让所有人用3个便签写出“最阻碍发布的一件事”。你会发现,超过一半的卡片是基础设施/自动化相关的。比如有一次我们发现平均部署时间长达45分钟,原因是单元测试套件中有大量慢查询和网络依赖。
我们在回顾会上当场决定:启动一个“性能测试框架重构”的用户故事,并由测试和Dev一起组建两人小组,在一个Sprint内完成。下一Sprint的部署时间直接降到8分钟。这个决策的价值在于:让DevOps改进成为可追踪的Backlog项,而不是会后口头承诺。
如果你担心跑题,就明确回顾会的四个维度:人(协作)、流程(Sprint管理)、技术(代码质量)、基础设施(DevOps)。每个维度限定15分钟,用计时器控制。这样既不会跑题,又能让DevOps被平等对待。
很多团队把DevOps问题视为“运维部的事”,放在敏捷外讨论,其实是最大的决策失误,因为敏捷的终极目标是快速高质量交付,而DevOps恰恰是“快速”和“高质量”的递送管道。
4. 小团队(5-10人)有必要搞完整的DevOps流水线吗?还是简单用个脚本就够了?
我们小团队就8个人,产品刚起步,我该花两周搭Jenkins+Harbor+K8s,还是写几个Shell脚本先对付着用?担心过度工程,也担心后期重构成本高。
我的建议是:选择“可演进的最小化流水线”,而不是全栈式平台或完全手写脚本。我亲身经历:2019年带一个6人初创团队,刚开始图省事只写了一个deploy.sh脚本,手动执行。前三个月还行,但产品上线后用户增长,每天一次发布,脚本开始暴露出问题:某个用户只更新了一半就中断、环境变量改错导致线上回滚。
我被迫重新搭流水线,代价是花了一周迁移所有项目,并且期间业务发布暂停。后来我总结经验:小团队应该从“一条流水线+一个镜像仓库”起步。具体做法是:用GitLab自带的CI(免费版够用),.gitlab-ci.yml控制在40行以内(构建+测试+推送镜像+ssh部署到测试机)。不搞K8s,不搞服务网格。
当发布频率超过每天一次时,再逐步加入灰度发布、监控告警。这个做法的好处是:初期投入只需一两天,后期可以平滑迁移到更复杂的架构(比如把deploy stage改成交给K8s)。对比另一家小团队,他们一开始就上K8s,结果运维学习成本太高,三个月内没发布几次,反而拖慢敏捷迭代。
我的独特视角是:小团队不要追求“完整”,而要追求“最小可自动化”。把“部署脚本”视为一个用户故事来迭代演进,而不是一次性工程。这样既避免了运维债务,又不会因为过度工程导致团队士气低落。
如果你现在问我,我会推荐GitLab CI + Docker Compose + 单台服务器作为初始方案,等团队扩展到15人以上再引入K8s。
核心关键词
文章包含AI辅助创作:敏捷开发,DevOps必须跟上,发布者:fiy,转载请注明出处:https://worktile.com/kb/p/3976866
微信扫一扫
支付宝扫一扫
读者评论
作为经历过两次敏捷转型的技术负责人,这篇文章几乎把我踩过的坑全说了一遍。2019年我们团队也是先跑Scrum,迭代速度提到两周,结果发布卡在手工部署上,一个月只能发一次。后来用半年补CI/CD和自动化测试,部署频率才提到周更。作者说的'同期启动'太对了,我现在带新团队都是第一周就要把自动化管道搭好,哪怕不完美。另外那个'漏斗效应'的数据图我直接截图发到团队群里了,比讲一百遍道理都管用。
我是运维团队的一员,看到文中'从审批者变成平台提供者'那段特别有感触。前两年我们就是那种被开发吐槽的'卡发布窗口'的运维,不是不想放,是真的怕出事。后来我们团队花两个月搭了自助发布平台,集成了自动化安全检查,开发自己就能触发部署。结果呢?部署频率从月更变成周更,故障率反而下降了。今年我们还在进一步做灰度发布和可观测性,感觉运维终于从背锅变成了赋能。这篇文章对运维同行的启发很大,推荐阅读。
文章数据很扎实,DORA报告和雷达图对比都用了,这个说服力比纯理论强多了。不过我有个实际困惑:我们团队只有15个人,同时推敏捷和DevOps人力根本不够,文中说的'第一个季度搭建CI/CD'对于小团队来说压力太大了。我们目前的做法是先跑好Scrum,用现成的GitLab CI做最简单的构建部署,一个月一次发布先跑顺。想问作者对小团队有没有更务实的分步建议?毕竟不是每个团队都像大厂那样有专门的基础设施工程师。