【书籍】DeepSeek谈《持续交付2.0》
目录
- 一、深入理解
- 1. 核心理念升级:从"自动化"到"双环模型"
- 2. 数字化转型的五大核心能力
- 3. 关键实践与案例
- 4. 组织与文化变革
- 5. 与其它框架的关系
- 6. 实际应用建议
- 二、对于开发实习生的帮助
- 1. 立刻提升你的代码交付质量(技术验证环实操)
- 2. 让导师/同事觉得你“有灵性”(业务验证环意识)
- 3. 实习生最容易踩的坑与解法
- 4. 超车技巧:用持续交付思维写简历
- 5. 低成本学习路径
- 三、高频出现的核心原则
- 1. "小步快跑"提交原则
- 2. "生产环境等价"原则
- 3. "测试是代码的刹车系统"原则
- 4. "配置即代码"原则
- 5. "快速失败"原则
- 6. "监控是第二测试套件"原则
- 如何落地这些原则?
- 从**防御性编程**开始:每次写代码时自问:
- 利用IDE插件强化习惯:
- 观察团队痛点:如果发现:
《持续交付2.0》是乔梁在经典著作《持续交付》基础上的升级版本,它不仅延续了第一版的核心思想,还结合了数字化转型时代的新需求,提出了更系统化的方法论。
一、深入理解
1. 核心理念升级:从"自动化"到"双环模型"
第一版的基础:持续交付1.0强调自动化构建-测试-部署流水线,目标是"随时可发布"。
2.0的突破:提出**“双环模型”**(业务验证环+技术验证环):
业务验证环(外环):快速验证用户需求价值,通过MVP(最小可行产品)和数据分析迭代。
技术验证环(内环):保障代码质量与交付效率,延续CI/CD流水线但更强调反馈速度。
关键点:两个环的协同实现了"业务-技术"的双向驱动,避免技术团队与业务目标脱节。
2. 数字化转型的五大核心能力
书中提出组织需要构建的五大能力,可类比为"持续交付的生态系统":
持续探索:通过用户画像、A/B测试等工具快速验证假设(对应业务验证环)。
持续集成:代码提交后立即构建、测试,反馈时间控制在分钟级(技术验证环基础)。
持续部署:自动化发布到生产环境,但强调渐进式发布(如金丝雀发布)。
持续运营:监控生产环境数据并反哺决策(连接双环的关键)。
持续优化:通过技术债管理、架构演进保持系统可持续性。
3. 关键实践与案例
分支策略的演变:从Git Flow到Trunk-Based Development(主干开发),减少合并冲突,加速反馈。
测试金字塔的强化:强调单元测试覆盖率(70%+)和契约测试(微服务场景),减少UI测试依赖。
环境治理:提出"环境即代码",用IaC(如Terraform)统一管理环境,解决"在我机器上能跑"问题。
案例:书中提到某金融企业通过双环模型将需求周期从2周缩短到2天,缺陷率下降60%。
4. 组织与文化变革
DevOps文化的深化:打破"交付即结束"思维,强调开发对业务结果负责(You Build It, You Run It)。
度量体系:不仅关注部署频率,更关注需求前置时间(Lead Time)和故障恢复时间(MTTR)。
反模式警示:如"虚假的CI"(每日合并主干)、"隔离的Ops团队"等。
5. 与其它框架的关系
与敏捷的区别:持续交付2.0是敏捷的"实现引擎",解决"如何快速交付价值"而非"如何协作"。
与SRE的互补:SRE(站点可靠性工程)的Error Budget概念与持续部署的渐进发布结合,平衡速度与稳定性。
6. 实际应用建议
从小开始:先在一个团队试点双环模型,例如用1周时间完成一个用户故事的"探索-交付-验证"闭环。
工具链示例:
业务环:Jira+数据分析工具(如Amplitude)
技术环:GitHub Actions+Jenkins+Prometheus
领导层参与:通过可视化价值流图(Value Stream Mapping)暴露瓶颈,获得资源支持。
二、对于开发实习生的帮助
1. 立刻提升你的代码交付质量(技术验证环实操)
提交代码像发微信一样谨慎:
书中强调的**小批量提交(Small Batch Size)**能让你少挨骂。实习时养成习惯:
每次提交不超过3个文件变更(避免大规模冲突)
提交前本地跑单元测试(mvn test或npm test)
写清晰的提交信息(参考Conventional Commits)
git commit -m "feat(login): add SMS verification timeout"
学会用CI工具自查:
主动了解团队的Jenkins/GitLab CI配置,在本地模拟CI流程(比如用docker build验证能否构建)。
2. 让导师/同事觉得你“有灵性”(业务验证环意识)
问对问题:
不要只问“这个功能怎么实现”,而是尝试问:
“这个需求解决用户的什么痛点?”(业务验证环思维)
“上线后我们怎么知道它成功了?”(持续运营意识)
在PR里展示思考:
提交Pull Request时,除了代码差异,附上:
## 业务影响
- 会影响用户登录成功率(监控看板链接)
## 测试建议
- 特别注意国际手机号格式校验
3. 实习生最容易踩的坑与解法
“环境问题”背锅:
用书中提到的容器化开发环境自救:
FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
用这个Dockerfile可100%复现生产环境。
“在我电脑上好使”:
学会用docker-compose或团队约定的Vagrant配置,避免环境差异。
4. 超车技巧:用持续交付思维写简历
普通实习生写法:
“参与了XX系统的开发”
你的写法:
“通过拆分数据库变更脚本+蓝绿部署方案,使功能上线回滚时间从1小时缩短至5分钟”
(体现了技术验证环的部署能力)
“配合产品用A/B测试验证登录页改版,转化率提升15%”
(体现了业务验证环意识)
5. 低成本学习路径
每天15分钟实践:
时间 行动项
周一 在本地跑通项目的单元测试
周二 研究CI流水线的失败邮件
周三 用git bisect定位某次提交引入的bug
实习生专属工具包:
Katacoda:交互式学习Docker/K8s
Postman Automated Testing:快速验证API契约
关键认知:持续交付能力是开发者的“基础体能”
就像运动员必须练核心力量,这些技能会让你:
比只会CRUD的实习生更容易通过试用期
在敏捷团队中更快获得重要任务分配
未来无论是走技术专家还是管理路线都有底层优势
三、高频出现的核心原则
1. "小步快跑"提交原则
原则:每次提交的代码变更必须小到可以随时回滚(书中强调的"Small Batches")。
高频场景:
修复Bug时忍不住"顺手"重构其他代码
开发新功能时攒了一周才提交
正确操作:
# 错误:一次性提交整个模块
git add src/features/user/
git commit -m "complete user management"# 正确:按逻辑拆分提交
git add src/features/user/api.js
git commit -m "feat(user): add createUser API"
git add src/features/user/validation.js
git commit -m "fix(user): handle email format validation"
实习生加分项:用git rebase -i整理提交历史后再推送。
2. "生产环境等价"原则
原则:开发环境必须无限接近生产环境(书中第4章环境治理)。
高频翻车点:
“本地跑得好好的,上线就报错”
数据库版本差异导致SQL执行失败
解决方案:
docker-compose.yml
services:app:build: .environment:DB_URL: "postgres://prod_user:password@db:5432/prod_db" # 故意和生产一致db:image: postgres:14.5 # 指定和生产相同的版本
快速验证:在本地用docker-compose run app pytest运行测试。
3. "测试是代码的刹车系统"原则
原则:没有自动化测试的代码等于蒙眼狂奔(书中测试金字塔实践)。
典型违规:
手动测试UI却忽略单元测试
测试代码复制粘贴导致维护困难
正确示例(Python):
# 错误:测试依赖UI操作
def test_login():open_browser()type_text(username_field, "test") # 脆弱的UI测试click(login_button)assert page_contains("Welcome")# 正确:单元测试业务逻辑
def test_login_success():user = authenticate(username="test", password="123")assert user.role == "member" # 核心逻辑验证
实习生技巧:用pytest --cov-report term-missing查看未覆盖的代码行。
4. "配置即代码"原则
原则:所有环境配置必须版本化(书中第6章基础设施即代码)。
常见错误:
直接修改服务器上的nginx.conf
部署文档写"找运维要数据库连接串"
正确做法:
# 生产环境数据库配置(terraform示例)
resource "aws_db_instance" "prod" {allocated_storage = 100 # 配置可追溯engine_version = "13.4"instance_class = "db.m5.large"
}
紧急情况:即使要临时修改,也要先git checkout -b hotfix-config再操作。
5. "快速失败"原则
原则:在流水线的最早阶段暴露问题(书中CI/CD流水线设计)。
反面教材:
代码合并后才跑耗时1小时的测试
部署到生产环境才发现依赖缺失
推荐流水线阶段:
# GitLab CI示例
stages:- lint # 立即发现代码风格问题(秒级)- unit-test # 核心单元测试(<5分钟)- integration # 集成测试(可并行)- deploy # 最后才部署
实习生避坑:在本地先运行npm run lint再推送代码。
6. "监控是第二测试套件"原则
原则:生产环境监控是最后的防御线(书中持续运营章节)。
新手常忽略:
只关注功能实现,不考虑日志输出
异常捕获后直接吞掉错误
如何落地这些原则?
从防御性编程开始:每次写代码时自问:
这个变更如何回滚?
怎么用自动化验证它?
出问题时日志能否定位?
利用IDE插件强化习惯:
SonarLint(实时代码质量检测)
GitLens(可视化代码变更历史)
Docker插件(右键直接运行容器)
观察团队痛点:如果发现:
经常为解决环境问题开会 → 推广Docker开发环境
发布后频繁回滚 → 建议增加集成测试阶段
相关文章:
【书籍】DeepSeek谈《持续交付2.0》
目录 一、深入理解1. 核心理念升级:从"自动化"到"双环模型"2. 数字化转型的五大核心能力3. 关键实践与案例4. 组织与文化变革5. 与其它框架的关系6. 实际应用建议 二、对于开发实习生的帮助1. 立刻提升你的代码交付质量(技术验证环实…...
Mysql表的操作(2)
1.去重 select distinct 列名 from 表名 2.查询时排序 select 列名 from 表名 order by 列名 asc/desc; 不影响数据库里面的数据 错误样例 : 但结果却有点出乎意料了~为什么会失败呢? 其实这是因为书写的形式不对,如果带了引号,…...
智能物联网网关策略部署
实训背景 某智慧工厂需部署物联网网关,实现以下工业级安全管控需求: 设备准入控制:仅允许注册MAC地址的传感器接入(白名单:AA:BB:CC:DD:EE:FF)。协议合规性:禁止非Modbus TCP(端口…...
神经网络语言模型与统计语言模型的比较
神经网络语言模型(Neural Language Models, NLMs)与统计语言模型(Statistical Language Models, SLMs)是自然语言处理(NLP)中两类核心的语言建模方法,其核心差异体现在建模方式、表示能力、数据…...
Java学习总结-线程池
线程池是什么? 线程池就是一个可以复用线程的技术。 假若不用线程池的问题:创建新线程开销很大,不能来一个任务就就创建一个新线程。 如何创建线程池对象? 方法一:使用ExecutorService的实现类ThreadPoolExecutor创…...
Android 中绕过hwbinder 实现跨模块对audio 的HAL调用
需求 Audio 模块中专门为 TV 产品添加了一些代码,需要在 hdmi 的 HAL 代码中进行调用以完成某些功能。 解决方法 首先将 hdmi HAL 要调用的 audio 接口函数所在的 .so 链接到最基本的 lib.primay.amlogic.so 中(其它平台上这个 .so 文件的名字也可能是…...
【DB2】事务日志满/归档占用较大问题处理记录
某DB2环境经常报错The active log is full and is held by...,并且归档磁盘占用较大 事务日志满 事务日志满可以理解为Oracle的redo追尾,即业务写入量大于redo刷盘速度,这时候其他SQL会陷入等待,容易造成性能问题 一般由两方面原…...
基于CNN-BiLSTM-GRU的深度Q网络(Deep Q-Network,DQN)求解移动机器人路径规划,MATLAB代码
一、深度Q网络(Deep Q-Network,DQN)介绍 1、背景与动机 深度Q网络(DQN)是深度强化学习领域的里程碑算法,由DeepMind于2013年提出。它首次在 Atari 2600 游戏上实现了超越人类的表现,解决了传统…...
CVE-2025-29927 Next.js 中间件鉴权绕过漏洞
Next.js Next.js 是一个基于 React 的现代 Web 开发框架,用来构建高性能、可扩展的 Web 应用和网站。 CVE-2025-29927 Next.js 中间件鉴权绕过漏洞 CVE-2025-29927是Next.js框架中的一个授权绕过漏洞,允许攻击者通过特制的HTTP请求绕过在中间件中执行…...
数据结构(五)——AVL树(平衡二叉搜索树)
目录 前言 AVL树概念 AVL树的定义 AVL树的插入 右旋转 左旋转 左右双旋 右左双旋 插入代码如下所示 AVL树的查找 AVL树的遍历 AVL树的节点个数以及高度 判断平衡 AVL树代码如下所示 小结 前言 前面我们在数据结构中介绍了二叉搜索树,其中提到了二叉搜…...
C++类型转换详解
目录 一、内置 转 内置 二、内置 转 自定义 三、自定义 转 内置 四、自定义 转 自定义 五、类型转换规范化 1.static_case 2.reinterpret_cast 3.const_cast 4.dynamic_cast 六、RTTI 一、内置 转 内置 C兼容C语言,在内置类型之间转换规则和C语言一样的&am…...
【前端】【React】性能优化三件套useCallback,useMemo,React.memo
一、总览:性能优化三件套 useCallback(fn, deps):缓存函数,避免每次渲染都新建函数。useMemo(fn, deps):缓存值(计算结果),避免重复执行计算。React.memo(Component):缓存组件的渲染…...
excel数据透视表大纲格式改为表格格式
现有这样一个数据透视表: 想要把他变成这样的表格格式: 操作步骤: 第一步: 效果: 第二步: 效果: 去掉分类汇总: 效果: 去掉展开/折叠按钮: 操作方式…...
pycharm中安装Charm-Crypto
一、安装依赖 1、安装gcc、make、perl sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl #检查版本 gcc -v make -v perl -v 2、安装依赖库m4、flex、bison(如果前面安装过pypbc的话,应该已经装过这些包了) sudo apt-get update sudo apt…...
天梯集训+代码打卡笔记整理
1.着色问题 直接标注哪些行和列是被标注过的,安全格子的数量就是未标注的行*列 #include <bits/stdc.h> using namespace std;const int N 1e510; int hang[N],lie[N];int main(){int n,m;cin>>n>>m;int q;cin>>q;while(q--){int x,y;ci…...
python基础语法:缩进规则
Python 的缩进规则是其语法的重要组成部分,它通过缩进来表示代码块的层次结构,而不是像其他语言(如 C 或 Java)那样使用大括号 {}。以下是 Python 缩进规则的详细说明: 1. 缩进的基本规则 代码块的标识:Pyt…...
支付系统设计入门:核心账户体系架构
👉目录 1 账户记账理论 2 账户设计 3 账户性能问题 4 账户核心架构 5 小结 第三方支付作为中立的第三方,截断了用户和商户的资金流,资金先从用户账户转移到第三方支付平台账户,得到双方确认后再从支付平台账户转移到商户账户。 支…...
[LevelDB]Block系统内幕解析-元数据块(Meta Block)元数据索引块(MetaIndex Block)索引块(Index Block)
本文内容组织形式 Block的基本信息作用示意图举例说明 源码解析Footer格式写入&读取编码&解码 元数据块(Meta Block)构建&读取 元数据索引块构建&读取 索引块定义构建&读取核心方法-FindShortestSeparator&FindShortSuccessor作…...
leetcode:905. 按奇偶排序数组(python3解法)
难度:简单 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1: 输入:nums [3,1,2,4] 输出:[2,4,3,1] 解释:…...
抖音视频下载工具
抖音视频下载工具 功能介绍 这是一个基于Python开发的抖音视频下载工具,可以方便地下载抖音平台上的视频内容。 主要特点 支持无水印视频下载自动提取视频标题作为文件名显示下载进度条支持自动重试机制支持调试模式 使用要求 Python 3.10Chrome浏览器必要的P…...
断言与反射——以golang为例
断言 x.(T) 检查x的动态类型是否是T,其中x必须是接口值。 简单使用 func main() {var x interface{}x 100value1, ok : x.(int)if ok {fmt.Println(value1)}value2, ok : x.(string)if ok {//未打印fmt.Println(value2)} }需要注意如果不接受第二个参数就是OK,这…...
【家政平台开发(27)】商务部信用对接、法律咨询与视频面试功能开发全攻略
本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...
【数据结构】排序算法(下篇·开端)·深剖数据难点
前引:前面我们通过层层学习,了解了Hoare大佬的排序精髓,今天我们学习的东西可能稍微有点难度,因此我们必须学会思想,我很受感慨,借此分享一下:【用1520分钟去调试】,如果我们遇到了任…...
山东大学软件学院创新项目实训开发日志(9)之测试前后端连接
在正式开始前后端功能开发前,在队友的帮助下,成功完成了前后端测试连接: 首先在后端编写一个测试相应程序: 然后在前端创建vue 并且在index.js中添加一下元素: 然后进行测试,测试成功: 后续可…...
【VUE3】Eslint 与 Prettier 的配置
目录 0 前言 1 VSCode 中的 Eslint 与 prettier 插件 2 两种方案 3 eslint.config.js 4 eslint-plugin-prettier 插件 5 eslint-config-prettier 插件 6 安装插件命令 7 其他配置 8 参考资料 0 前言 黑马程序员视频地址:160-Vue3大事件项目-ESlint配合P…...
蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】
【背景说明】本文的作者是一名算法竞赛小白,在第一次参加蓝桥杯之前希望整理一下自己会了哪些算法,于是有了本文的诞生。分享在这里也希望与众多学子共勉。如果时间允许的话,这一系列会分为上中下三部分和大家见面,祝大家竞赛顺利…...
springboot调用python文件,python文件使用其他dat文件,适配windows和linux,以及docker环境的方案
介绍 后台是用springboot技术,其他同事做的算法是python,现在的需求是springboot调用python,python又需要调用其他的数据文件,比如dat文件,这个文件是app通过蓝牙获取智能戒指数据以后,保存到后台…...
GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)、稳定捕捉模块(SCM)和创新的AIoU损失函…...
Python 中使用单例模式
有这么一种场景,Web服务中有一个全局资源池,在需要使用的地方就自然而言引用该全局资源池即可,此时可以将该资源池以单例模式实现。随后,需要为某一特殊业务场景专门准备一个全局资源池,于是额外复制一份代码新建了一个…...
系统思考—提升解决动态性复杂问题能力
感谢合作伙伴的信任推荐! 客户今年的人才发展重点之一,是提升管理者应对动态性、复杂性问题的能力。 在深入交流后,系统思考作为关键能力模块,最终被纳入轮训项目——这不仅是一次培训合作,更是一场共同认知的跃迁&am…...
