01软件交付的问题

1. 引言

本书的核心模式是部署流水线,以持续集成理论作为其理论基石

部署流水线有三个目标

  • 让软件构建,部署,测试和发布过程对所有人可见,促进合作
  • 改善反馈,能在整个过程中更早的发现和解决问题(做一件事,有问题发生是一定的,重要的是快速的定位和解决问题)
  • 使在任何环境下部署和发布任意版本的应用成为自动化的过程,提高效率

一个简单的部署流水线

提交阶段 ==> 自动化验收测试 ==> 自动化容量测试 ==> 手工测试 ==> 发布

2. 一些常见的反模式

2.1. 反模式:手工部署软件

这个反模式一般具有如下特征

  • 有一份详尽的操作文档,其中描述了多出需要注意的地方(呵呵,很多地方连操作文档都没有啊)
  • 手工测试程序是否运行正确(懒,一不定会测,累,漏测了。。。)
  • 总有客户来问,部署怎么又出问题了(金主生气,就问你紧不紧张)
  • 如果是集群环境,个环境配置经常有出入(线上访问测试库)
  • 发布过程时间较长(人的速度哪能跟计算机比啊)
  • 发布结果无法预测(凭运气)
  • 经常加班,还搞不定问题(恶性循环)

理想的部署流程应该是

  1. 挑选要部署的版本和环境
  2. 按一下“部署”按钮

为什么需要部署自动化

  • 使部署过程可重复
  • 免去部署文档的维护,一个部署脚本即是所有文档
  • 部署过程可审计追踪,我有日志,别抵赖,呔,哪里跑
  • 摆脱对人的过分依赖,让傻子也能上线

2.2. 反模式:开发完成之后才向生产环境部署

经常出现的情况

  • 运维人员之前一直没有接触过应用程序,莫名其妙扔过来一个包,老子知道你是干嘛滴啊
  • 程序相关的配置,数据库脚本,部署文档等都没有在正式环境下测试过(胆子真大)
  • 开发团队和运维团队协作太少(除了互相甩锅没啥交流)

导致的各种问题

  • 第一次部署成了噩梦(无准备之仗不好打啊)
  • 开发环境和部署环境差距越大,问题越多(绝大部分问题都是不一致导致的)
  • 各团队之间协作焦头烂额(可参照正规军与乌合之众的区别)

解决方案

将测试,部署和发布活动都纳入到开发过程中,让他们成为正常开发流程的一部分,对部署过程也进行测试(可以把部署当成一个产品来开发)

2.3. 反模式:生产环境的手工配置

这种反模式经常有如下特征

  • 诶,我本地好使啊(呵呵)
  • 集群中各节点表现不同(配置参数丢三落四)
  • 每次准备环境时间长(上厕所,到咖啡)
  • 无法回滚(要是真回滚了,估计产生更多问题)
  • 不知不觉,集群中的服务器,操作系统配置变得都不一样了(人的脑子啊,是相当不靠谱的)

怎样解决这些问题?

采用配置管理,可以重复的创建开发应用程序所需要的每个基础设施

对于各个环境中的信息,都应该完全掌控,而且,所有环境的生成,配置的修改都应该由自动化程序实现,禁止手动修改(手动是万恶之源)

2.4. 如何改变这种情况

采用部署流水线,将软件的发布变成一种低风险、频繁、廉价、迅速且可预见的过程

最后的目标是实现将自动化的测试和部署,以及全面的配置管理结合在一起,实现一键式软件发布

3. 如何实现目标

为保证能持续的以高质量交付我们的软件,需要频繁的自动化发布软件

对于频繁的自动化发布软件,反馈是至关重要的,对于反馈,应该达到三个标准

  • 无论什么样的修改都应该触发反馈流程(就像神经系统一样,时刻监控人的动态)
  • 反馈应该尽快发出(被开水烫了,马上知道疼)
  • 交付团队必须接收反馈,并依据它做出行动响应(疼了你得躲啊。。。)

下面详细介绍一下这三个标准

3.1. 无论什么样的修改都应该触发反馈流程

这些修改包括对以下项的修改

  1. 源代码(持续集成)
  2. 配置信息(配置管理)
  3. 运行环境(基础设施和环境管理)
  4. 数据(数据管理)

反馈流程

完全自动化的方式尽可能的测试每一次变更

测试内容包括但不限于

  • 创建可执行代码的流程必须是能奏效的。这用于验证源代码是否符合语法
  • 软件的单元测试必须是成功的。这可以检查应用程序的行为是否与期望相同
  • 软件应该满足一定的质量标准,比如测试覆盖率以及其他与技术相关的度量项
  • 软件的功能验收测试必须是成功的。这可以检查应用是否满足业务验收条件,交付了所期望的业务价值
  • 软件的非功能测试必须是成功的。这可以检查应用程序是否满足用户对性能、有效性、安全性等方面的要求
  • 软件必须通过了探索性测试,并给客户以及部分用户做过演示。这些通常在一个手工测试环境上完成。此时,产品负责人可能认为软件功能还有缺失,我们自己也可能发现需要修复的缺陷,还要为其写自动化测试来避免回归测试

3.2. 反馈应该尽快发出

关键是自动化,主要通过部署流水线来实现,后面各章会详细介绍

3.3. 交付团队必须接收反馈,并依据它做出行动响应

没有响应,反馈何用?

3.4. 这个流程可以推广吗

很多思想来源于精益制造,目标是快速交付高质量的产品,聚焦于消除浪费,减少成本

4. 收效

4.1. 授权团队

让整个团队合作在一起

4.2. 较少错误

通过减少手工的重复任务,避免大部分错误

4.3. 缓解压力

让发布任务变得简单可控,免得每次发布都如临大敌

4.4. 部署的灵活性

随时找到以往的部署版本,意见部署任意版本

4.5. 多加练习,使其完美

目标是不管部署到什么环境,都使用相同的部署方法

5. 候选发布版本

每次提交代码都产生一个可发布版本

但是实际开发中,要想验证一个可发布版本,就要进行一次集成,通常这个过程难以控制,所以就会推迟,集成频率越低,越痛苦,但是越痛苦的事,越要频繁去做,要么会更痛苦

本书会通过持续集成这一实践来让集成变得无痛

6. 软件交付的原则

为了保证高质量的持续交付,下面的可以当做行为准则了

6.1. 为软件的发布创建一个可重复且可靠的过程

归根结底,软件的部署包括三件事

  • 提供并管理软件所需要的运行环境,包括硬件配置,所依赖的软件,基础设施以及所需的外部服务
  • 将应用程序的正确版本安装其上
  • 配置应用程序,包括所需的任何数据和状态

6.2. 将几乎所有的事情自动化

能让机器去做的就别自己做了

6.3. 把所有的东西都纳入版本控制

使每个版本相关的信息都能很快找到

6.4. 提前并频繁的做让你感到痛苦的事

这是一条很有用的启发式原则,更多解释可以看看《少有人走的路》

6.5. 内建质量

每个人都对质量负责,有问题立马解决

6.6. “DONE”意味着“已发布”

我们认为一个特性只有交到用户手中才算DONE,而不是开发完了就OK了

6.7. 交付过程是每个成员的责任

从相互指责扯皮到共同协作

6.8. 持续改进

戴明环(plan->do->check->act)

7. 小结

本书的目标是让发布过程变得无痛

新开了公众号,欢迎关注,主要分享一些读书笔记


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 一 什么是持续交付 持续交付是一种开发实践,即频繁地将软件的最新版本交付给测试或者用户进行验证,如果验证通过,代码...
    司鑫阅读 1,362评论 0 0
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 21,836评论 7 277
  • 任务: 获取三页小猎短租房租信息,并写入到数据库中http://sh.xiaozhu.com/search-dua...
    浮生只言片语阅读 311评论 0 0
  • 在這人世里, 總有許多人不辭而別。 他們曾讓我品嘗友誼的甜酒, 也曾為我讚誦愛情的芳菲。 但是,你們呵 終究會被風...
    瓶蓋阅读 213评论 0 2