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

下载地址:网盘下载

内容简介

编辑

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

《持续交付:发布可靠软件的系统方法》适合所有开发人员、测试人员、运维人员和项目经理学习参考。[2]

作者简介

编辑

Jez Humble ToughtWorks公司首席咨询顾问,致力于帮助企业快速、可靠地交付高质量软件,经常在各种敏捷技术大会上发表演讲,拥有牛津大学物理学学士学位和 伦敦大学民族音乐学的硕士学位。2000年至今,他曾在各行业和不同技术领域担任系统管理员、开发人员、培训人员、咨询师和经理人员。

目录

编辑

第一部分 基础篇

第1 章 软件交付的问题

1.1 引言

1.2 一些常见的发布反模式

1.2.1 反模式:手工部署软件

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

1.2.3 反模式:生产环境的手工配置管理

1.2.4 我们能做得更好吗

1.3 如何实现目标

1.3.1 每次修改都应该触发反馈流程

1.3.2 必须尽快接收反馈

1.3.3 交付团队必须接收反馈并作出反应

1.3.4 这个流程可以推广吗

1.4 收效

1.4.1 授权团队

1.4.2 减少错误

1.4.3 缓解压力

1.4.4 部署的灵活性

1.4.5 多加练习,使其完美

1.5 候选发布版本

1.6 软件交付的原则

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

1.6.2 将几乎所有事情自动化

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

1.6.4 提前并频繁地做让你感到痛苦的事

1.6.5 内建质量

1.6.6 “DONE”意味着“已发布”

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

1.6.8 持续改进

1.7 小结

第2 章 配置管理

2.1 引言

2.2 使用版本控制

2.2.1 对所有内容进行版本控制

2.2.2 频繁提交代码到主干

2.2.3 使用意义明显的提交注释

2.3 依赖管理

2.3.1 外部库文件管理

2.3.2 组件管理

2.4 软件配置管理

2.4.1 配置与灵活性

2.4.2 配置的分类

2.4.3 应用程序的配置管理

2.4.4 跨应用的配置管理

2.4.5 管理配置信息的原则

2.5 环境管理

2.5.1 环境管理的工具

2.5.2 变更过程管理

2.6 小结

第3 章 持续集成

3.1 引言

3.2 实现持续集成

3.2.1 准备工作

3.2.2 一个基本的持续集成系统

3.3 持续集成的前提条件

3.3.1 频繁提交

3.3.2 创建全面的自动化测试套件

3.3.3 保持较短的构建和测试过程

3.3.4 管理开发工作区

3.4 使用持续集成软件

3.4.1 基本操作

3.4.2 铃声和口哨

3.5 必不可少的实践

3.5.1 构建失败之后不要提交新代码

3.5.2 提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事

3.5.3 等提交测试通过后再继续工作

3.5.4 回家之前,构建必须处于成功状态

3.5.5 时刻准备着回滚到前一个版本

3.5.6 在回滚之前要规定一个修复时间

3.5.7 不要将失败的测试注释掉

3.5.8 为自己导致的问题负责

3.5.9 测试驱动的开发

3.6 推荐的实践

3.6.1 极限编程开发实践

3.6.2 若违背架构原则,就让构建失败

3.6.3 若测试运行变慢,就让构建失败

3.6.4 若有编译警告或代码风格问题,就让测试失败

3.7 分布式团队

3.7.1 对流程的影响

3.7.2 集中式持续集成

3.7.3 技术问题

3.7.4 替代方法

3.8 分布式版本控制系统

3.9 小结

第4 章 测试策略的实现

4.1 引言

4.2 测试的分类

4.2.1 业务导向且支持开发过程的测试

4.2.2 技术导向且支持开发过程的测试

4.2.3 业务导向且评价项目的测试

4.2.4 技术导向且评价项目的测试

4.2.5 测试替身

4.3 现实中的情况与应对策略

4.3.1 新项目

4.3.2 项目进行中

4.3.3 遗留系统

4.3.4 集成测试

4.4 流程

4.5 小结

第二部分 部署流水线

第5 章 部署流水线解析

5.1 引言

5.2 什么是部署流水线

5.3 部署流水线的相关实践

5.3.1 只生成一次二进制包

5.3.2 对不同环境采用同一部署方式

5.3.3 对部署进行冒烟测试

5.3.4 向生产环境的副本中部署

5.3.5 每次变更都要立即在流水线中传递

5.3.6 只要有环节失败,就停止整个流水线

5.4 提交阶段

5.5 自动化验收测试之门

5.6 后续的测试阶段

5.6.1 手工测试

5.6.2 非功能测试

5.7 发布准备

5.7.1 自动部署与发布

5.7.2 变更的撤销

5.7.3 在成功的基础上构建

5.8 实现一个部署流水线

5.8.1 对价值流进行建模并创建简单的可工作框架

5.8.2 构建和部署过程的自动化

5.8.3 自动化单元测试和代码分析

5.8.4 自动化验收测试

5.8.5 部署流水线的演进

5.9 度量

5.10 小结

第6 章 构建与部署的脚本化

6.1 引言

6.2 构建工具概览

6.2.1 Make

6.2.2 Ant

6.2.3 NAnt 与 MSBuild

6.2.4 Maven

6.2.5 Rake

6.2.6 Buildr

6.2.7 Psake

6.3 构建部署脚本化的原则与实践

6.3.1 为部署流水线的每个阶段创建脚本

6.3.2 使用恰当的技术部署应用程序

6.3.3 使用同样的脚本向所有环境部署

6.3.4 使用操作系统自带的包管理工具

6.3.5 确保部署流程是幂等的(Idempotent)

6.3.6 部署系统的增量式演进

6.4 面向JVM 的应用程序的项目结构

6.5 部署脚本化

6.5.1 多层的部署和测试

6.5.2 测试环境配置

6.6 小贴士

6.6.1 总是使用相对路径

6.6.2 消除手工步骤

6.6.3 从二进制包到版本控制库的内建可追溯性

6.6.4 不要把二进制包作为构建的一部分放到版本控制库中

6.6.5 “test”不应该让构建失败

6.6.6 用集成冒烟测试来限制应用程序

6.6.7 .NET 小贴士

6.7 小结

第7 章 提交阶段

7.1 引言

7.2 提交阶段的原则和实践

7.2.1 提供快速有用的反馈

7.2.2 何时令提交阶段失败

7.2.3 精心对待提交阶段

7.2.4 让开发人员也拥有所有权

7.2.5 在超大项目团队中指定一个构建负责人

7.3 提交阶段的结果

7.4 提交测试套件的原则与实践

7.4.1 避免用户界面

7.4.2 使用依赖注入

7.4.3 避免使用数据库

7.4.4 在单元测试中避免异步

7.4.5 使用测试替身

7.4.6 最少化测试中的状态

7.4.7 时间的伪装

7.4.8 蛮力

7.5 小结

第8 章 自动化验收测试

8.1 引言

8.2 为什么验收测试是至关重要的

8.2.1 如何创建可维护的验收测试套件

8.2.2 GUI 上的测试

8.3 创建验收测试

8.3.1 分析人员和测试人员的角色

8.3.2 迭代开发项目中的分析工作

8.3.3 将验收条件变成可执行的规格说明书

8.4 应用程序驱动层

8.4.1 如何表述验收条件

8.4.2 窗口驱动器模式:让测试与GUI 解耦

8.5 实现验收测试

8.5.1 验收测试中的状态

8.5.2 过程边界、封装和测试

8.5.3 管理异步与超时问题

8.5.4 使用测试替身对象

8.6 验收测试阶段

8.6.1 确保验收测试一直处于通过状态

8.6.2 部署测试

8.7 验收测试的性能

8.7.1 重构通用任务

8.7.2 共享昂贵资源

8.7.3 并行测试

8.7.4 使用计算网格

8.8 小结

第9 章 非功能需求的测试

9.1 引言

9.2 非功能需求的管理

9.3 如何为容量编程

9.4 容量度量

9.5 容量测试环境

9.6 自动化容量测试

9.6.1 通过UI 的容量测试

9.6.2 基于服务或公共API 来录制交互操作

9.6.3 使用录制的交互模板

9.6.4 使用容量测试桩开发测试

9.7 将容量测试加入到部署流水线中

9.8 容量测试系统的附加价值

9.9 小结

第10 章 应用程序的部署与发布

10.1 引言

10.2 创建发布策略

10.2.1 发布计划

10.2.2 发布产品

10.3 应用程序的部署和晋级

10.3.1 首次部署

10.3.2 对发布过程进行建模并让构建晋级

10.3.3 配置的晋级

10.3.4 联合环境

10.3.5 部署到试运行环境

10.4 部署回滚和零停机发布

10.4.1 通过重新部署原有的正常版本来进行回滚

10.4.2 零停机发布

10.4.3 蓝绿部署

10.4.4 金丝雀发布

10.5 紧急修复

10.6 持续部署

10.7 小贴士和窍门

10.7.1 真正执行部署操作的人应该参与部署过程的创建

10.7.2 记录部署活动

10.7.3 不要删除旧文件,而是移动到别的位置

10.7.4 部署是整个团队的责任

10.7.5 服务器应用程序不应该有GUI

10.7.6 为新部署留预热期

10.7.7 快速失败

10.7.8 不要直接对生产环境进行修改

10.8 小结

第三部分 交付生态圈

第11 章 基础设施和环境管理

11.1 引言

11.2 理解运维团队的需要

11.2.1 文档与审计

11.2.2 异常事件的告警

11.2.3 保障IT 服务持续性的计划

11.2.4 使用运维团队熟悉的技术

11.3 基础设施的建模和管理

11.3.1 基础设施的访问控制

11.3.2 对基础设施进行修改

11.4 服务器的准备及其配置的管理

11.4.1 服务器的准备

11.4.2 服务器的持续管理

11.5 中间件的配置管理

11.5.1 管理配置项

11.5.2 产品研究

11.5.3 考查中间件是如何处理状态的

11.5.4 查找用于配置的API

11.5.5 使用更好的技术

11.6 基础设施服务的管理

11.7 虚拟化

11.7.1 虚拟环境的管理

11.7.2 虚拟环境和部署流水线

11.7.3 用虚拟环境做高度的并行测试

11.8 云计算

11.8.1 云中基础设施

11.8.2 云中平台

11.8.3 没有普适存在

11.8.4 对云计算的批评

11.9 基础设施和应用程序的监控

11.9.1 收集数据

11.9.2 记录日志

11.9.3 建立信息展示板

11.9.4 行为驱动的监控

11.10 小结

第12 章 数据管理

12.1 引言

12.2 数据库脚本化

12.3 增量式修改

12.3.1 对数据库进行版本控制

12.3.2 联合环境中的变更管理

12.4 数据库回滚和无停机发布

12.4.1 保留数据的回滚

12.4.2 将应用程序部署与数据库迁移解耦

12.5 测试数据的管理

12.5.1 为单元测试进行数据库模拟

12.5.2 管理测试与数据之间的耦合

12.5.3 测试独立性

12.5.4 建立和销毁

12.5.5 连贯的测试场景

12.6 数据管理和部署流水线

12.6.1 提交阶段的测试数据

12.6.2 验收测试中的数据

12.6.3 容量测试的数据

12.6.4 其他测试阶段的数据

12.7 小结

第13 章 组件和依赖管理

13.1 引言

13.2 保持应用程序可发布

13.2.1 将新功能隐蔽起来,直到它完成为止

13.2.2 所有修改都是增量式的

13.2.3 通过抽象来模拟分支

13.3 依赖

13.3.1 依赖地狱

13.3.2 库管理

13.4 组件

13.4.1 如何将代码库分成多个组件

13.4.2 将组件流水线化

13.4.3 集成流水线

13.5 管理依赖关系图

13.5.1 构建依赖图

13.5.2 为依赖图建立流水线

13.5.3 什么时候要触发构建

13.5.4 谨慎乐观主义

13.5.5 循环依赖

13.6 管理二进制包

13.6.1 制品库是如何运作的

13.6.2 部署流水线如何与制品库相结合

13.7 用Maven 管理依赖

13.8 小结

第14 章 版本控制进阶

14.1 引言

14.2 版本控制的历史

14.2.1 CVS

14.2.2 SVN

14.2.3 商业版本控制系统

14.2.4 放弃悲观锁

14.3 分支与合并

14.3.1 合并

14.3.2 分支、流和持续集成

14.4 DVCS

14.4.1 什么是DVCS

14.4.2 DVCS 简史

14.4.3 企业环境中的DVCS

14.4.4 使用DVCS

14.5 基于流的版本控制系统

14.5.1 什么是基于流的版本控制系统

14.5.2 使用流的开发模型

14.5.3 静态视图和动态视图

14.5.4 使用基于流的版本控制系统做持续集成

14.6 主干开发

14.7 按发布创建分支

14.8 按功能特性分支

14.9 按团队分支

14.10 小结

第15 章 持续交付管理

15.1 引言

15.2 配置与发布管理成熟度模型

15.3 项目生命周期

15.3.1 识别阶段

15.3.2 启动阶段

15.3.3 初始阶段

15.3.4 开发与发布

15.3.5 运营阶段

15.4 风险管理流程

15.4.1 风险管理基础篇

15.4.2 风险管理时间轴

15.4.3 如何做风险管理的练习

15.5 常见的交付问题、症状和原因

15.5.1 不频繁的或充满缺陷的部署

15.5.2 较差的应用程序质量

15.5.3 缺乏管理的持续集成工作流程

15.5.4 较差的配置管理

15.6 符合度与审计

15.6.1 文档自动化

15.6.2 加强可跟踪性

15.6.3 在筒仓中工作

15.6.4 变更管理

15.7 小结

参考书目

下载地址:网盘下载

原文地址:https://www.cnblogs.com/longgg/p/8424153.html

时间: 2024-10-07 19:02:54

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

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

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

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

其他持续交付相关文章:<持续交付>系列文章目录 第一章 软件交付的问题 1. 引言 本书的核心模式是部署流水线,以持续集成理论作为其理论基石 部署流水线有三个目标 让软件构建,部署,测试和发布过程对所有人可见,促进合作 改善反馈,能在整个过程中更早的发现和解决问题(做一件事,有问题发生是一定的,重要的是快速的定位和解决问题) 使在任何环境下部署和发布任意版本的应用成为自动化的过程,提高效率 一个简单的简单的部署流水线 提交阶段 ==> 自动化验收测试 ==> 自动化容量测试 ==&

基于Jenkins的持续交付全流程设计与实践

1 从理论开始 什么是DevOps? 近年来,随着DevOps理念的逐渐深入人心,企业逐渐意识到从看似重复的手工劳动中实现自动化流程处理,对于提高企业劳动生产力已经非常重要,尤其是面向互联网的开发者,往往每次上线时,最大的挑战并非需求的走查或测试和改bug,而是由于发布的流程不够规范,将成果发布到目标环境后可能造成的配置错误或引发其他已知未知问题所造成的额外工作量,使得生产环境的发布流程总会存在不顺利. 而DevOps则致力于统一整合软件开发和软件运维,其特点是强烈倡导对构建软件的所有环节(从集

运维与持续交付

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

基于容器的持续交付管道

基于容器的持续交付管道 在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景.Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的能力,今天这篇文章将对如何使用微软的全生命周期管理平台VSTS/TFS来构建基于容器的CI/CD管道来支持团队开发的场景. #1 前世今生 & 世界你好#2 容器化主机#3 在macOS上使用Visual Studio Code和Docker开发asp.net core和my

[转载]持续交付和DevOps的前世今生

作者/分享人:乔梁,20年IT老兵,腾讯公司高级管理顾问,敏捷和精益开发专家,持续交付领域先行者.曾就职于百度,国内多个知名互联网公司的企业教练. 历年QCon技术大会的讲师和专题出品人. 这是一个新概念风起云勇的时代. 就让我们从云端抓它几个名词下来,一起玩耍吧!!! “敏捷软件开发”,“增长黑客”,“持续集成”,“DevOps”,“精益创业”,“持续交付”,“大数据”... ... OK,就这四个啦: “敏捷软件开发”,“持续集成”,“DevOps”,“持续交付”. 先让我们在Wikiped

Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

本文根据[2016 全球运维大会?深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,负责IBM企业平台云产品线PureApplication System的研发工作:还负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 日程 大家好,我演讲的主题是<云端基于Docker的微服务与持

持续交付工具ThoughtWorks Go部署step by step

持续交付工具ThoughtWorks Go部署step by step http://blogs.360.cn/360cloud/2014/05/13/%E6%8C%81%E7%BB%AD%E4%BA%A4%E4%BB%98%E5%B7%A5%E5%85%B7thoughtworks-go%E9%83%A8%E7%BD%B2step-by-step/ Posted on 2014 年 5 月 13 日 by zieckey | Leave a reply 1. ThoughtWorks  Go简

[持续交付实践] 安全扫描自动化测试平台实现

前言 TesterHome有人专门加了我QQ问安全测试这个话题,所以这篇准备先聊聊持续交付中的安全测试.现在信息安全已经上升到了国家战略的高度,特别是今年<中华人民共和国网络安全法>颁布后,用户隐私通过国家立法的方式被严格要求保护,另外一方面安全灰产行业风起云涌,形成了一个巨大的地下产业链条和破坏能力.在此背景下,越来越多的互联网公司也开始组建自己的安全职能部门,但也会发现很多公司的软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其中一些漏洞甚至直指软件