持续交付之一——软件交付的问题

其他持续交付相关文章:《持续交付》系列文章目录

第一章 软件交付的问题

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. 小结

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

时间: 2024-10-03 19:00:57

持续交付之一——软件交付的问题的相关文章

项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery

网页为什么要做自适应交付,皆因现在移动设备大行其道,现在是移动互联网时代,以IOS及Android为首的各种移动终端已经遍地开花. 当人家用380px的iphone打开你的网页时,你总不能显示个1024px的页面给人家,用户体验大打折购,因为响应式设计或者自适应交付就应运而生. 之前已经提到过响应式设计(responsive design),但响应式设计有个重点就是不管3721,全部资源(html,css,js)统统加载下来,页面比较冗肿:而响应式的交付,完美的响应式交付是服务器跟据访问者的设备

《持续集成:软件质量改进和风险降低之道》

持续集成:软件质量改进和风险降低之道 主旨 这本书讲的是关于持续集成的原则和实践.Martin Fowler关于CI的热门文章发表于2006年,这本书作于2007年,虽然十年间CI的工具已经发生了不少变迁,但本书中提到的基本原则和实践仍然值得借鉴,而且书中提到的关于CI未来发展方向的论述也得到了验证. 本书分为两部分: 第1部分:CI的背景知识,包括基本概念.基本原则与推荐的实践 第2部分:如何创建全功能的CI系统,包括五个持续: 持续数据库集成 持续测试 持续审查 持续部署 持续反馈 第1部分

敏捷武士:看敏捷高手交付卓越软件pdf

下载地址:网盘下载 内容简介: 在激烈竞争和充满无限可能的今天,响应变化的能力已成为组织的核心生存能力.因此,敏捷对于软件开发组织是一个必然的选择,而非一个可有可无选项.但如何正确实施敏捷,从而构建灵活响应的组织,却绝非易事,需要在实践中不断总结.提高,同时也更需要从大师们的敏捷实践中获取宝贵经验. 作者是经验丰富的敏捷培训专家,他利用本书总结出了敏捷武士的修炼之道,重点指导读者: 如何拨云见日,看透项目的本质 如何收集需求,做出估算并提出项目计划 如何雷厉风行地执行计划 计划有误该如何处理 如

SAP VL10B 报错 - 4500000317 000010 交付 $ 1 的交付项目 000010 与 POD 无关-

如下公司间STO单据, 业务背景是货物从公司代码LYSP转入公司代码BTSE. 试图执行VL10B, 报错, 检查STO的交货类型,是ZNC3, 看ZNC3的后台配置, 可以发现ZNC3类型的交货,需要POD. 而BTSE这个BP(客户)里,POD相关没有勾选.修改这个BP,勾选POD相关, 重新VL10B,创建DN,就成功了, 2019-12-08 写于苏州市. 原文地址:https://www.cnblogs.com/DicksonJYL/p/12111150.html

要抓住100万软件开发者,华为公有云打算这么做

(上图为华为企业云业务部总裁杨瑞凯) 华为要做公有云?华为怎么做公有云?华为做公有云有戏吗?自从2017年3月10日华为轮值CEO徐直军在长沙华为中国生态伙伴大会2017上宣布华为将组建负责公有云的Cloud BU并在2017年强力投资打造开放的公有云后,就激起了业界强烈的关注和一连串的问题. 华为在2011年成立企业BG全力拓展政企市场,当时也开始积累华为企业云的能力.2015年7月,华为举行了云服务的战略发布会,当时把公有云命名"华为企业云".2017年3月,华为在大连和青岛相继举

软件开发过程自动化原理及技术(完整示例)

软件开发过程自动化原理及技术 一个简单完整的自动化示例 1   概述 关于本文,最开始只是想写一些关于 软件自动化测试开发 的文章,但是后来写着写着,发现不先在宏观上的软件开发过程进行介绍,不会引起大家对 自动化 技术形成了解和重视.所以本文从软件工程宏观层次进行了介绍,并和传统的实现方法做了一些对比,并附了一些代码,让有兴趣的朋友对自动化的理念及具体的实现技术手段有一些初步的认识. 既然是要 自动化 那么肯定就是冲着 效率 来的.在正式开始系统化的自动化技术学习之前,先来一个完整的示例来有个对

持续交付-发布可靠软件的系统方法pdf

下载地址:网盘下载 内容简介 编辑 <持续交付:发布可靠软件的系统方法>讲述如何实现更快.更可靠.低成本的自动化软件交付,描述了如何通过增加反馈,并改进开发人员.测试人员.运维人员和项目经理之间的协作来达到这个目标.本书由三部分组成.第一部分阐述了持续交付背后的一些原则,以及支持这些原则的实践.第二部分是本书的核心,全面讲述了部署流水线.第三部分围绕部署流水线的投入产出讨论了更多细节,包括增量开发技术.高级版本控制模式,以及基础设施.环境和数据的管理和组织治理. <持续交付:发布可靠软件

运维与持续交付

在互联网的产品开发时代,产品迭代越来越频繁,"从功能开发完成直到成功部署"这一阶段被称为软件开发"最后一公里". 对于持续部署,@湾区日报 这样评论: 一个团队工程技术水平高低,直接反映在部署代码上.我碰到其他公司的人,都喜欢问你们怎么部署代码的,非常大开眼界.你很难相信,很多(有一定规模的)公司仍然是人肉 SSH 到十几.二十台机器上 git pull.手动重启服务器,部署一次代码几个小时 -- 这么原始,活该加班:) 持续部署(continuous deploy

[转] 持续集成与持续交付备忘录

URL  :   http://blog.csdn.net/hunterno4/article/details/22525667 一本好书使您改变.它将改变您的思想,您看待问题的角度和方式,最终,它将改改您的行为.然而,所有具有重要意义的改变都不会是在一夜之间发生的,如果您相信这种变革必会发生,不妨朝着这个方向去努力,经常改变,每次改变一点点. ——<持续集成:软件质量改进和风险降低之道> CI的价值: 减少风险:缺陷的检测与修复变得更快:通过持续测试与持续审查,软件的健康程度可以测量:可以减