《Java持续交付》这本书由Daniel Bryant和Abraham Marin-Perez合著,由张若飞翻译,2019年11月由电子工业出版社 出版。这本书详细介绍了Java软件开发的整个生命周期,并且结合了大量的成功实践经验,介绍了每个阶段可能会使用的工具和技能。内容还涉及了在Docker、Kubernetes、Cloud、FaaS等新兴环境下进行持续集成和持续交付的实践方法。无论是经验丰富的Java开发者还是希望接触DevOps的新手,这本书都提供了丰富的经验和知识。
书的目录包括如“持续交付的必要性”、“Java开发的演化”、“设计持续交付的架构”等多个章节,全面覆盖了Java应用开发的各个方面。例如,在讨论Java应用的部署平台、基础设施以及持续交付时,书中详细介绍了从传统基础设施到云平台、容器(如Docker)、Kubernetes和函数即服务(FaaS)等多种平台的特点和适用场景。
这本书是O'Reilly动物系列(中译本)的一部分,定价为119元人民币,页数为404页,ISBN为9787121374425。在O'Reilly Media网站上,这本书也提供了10天的免费试读机会。
《Java持续交付》目录 · · · · · ·
第 1 章 持续交付 :为什么需要持续交付,什么是持续交付....................1
入门知识 ....................................................................................................................... 1
赋能开发者 :为什么我们要持续交付 .......................................................................... 2
快速反馈会减少上下文切换 ................................................................................. 2
自动化的、可重复的以及可靠的发布................................................................... 2
定义“完成”的概念 ............................................................................................. 3
什么是构建管道 ............................................................................................................ 4
核心的构建管道阶段 ............................................................................................. 4
容器技术的影响 .................................................................................................... 7
对当前架构的影响 ................................................................................................ 8
总结 .............................................................................................................................. 9
第 2 章 Java 开发的演化..............................................................10
现代 Java 应用程序的需求 .......................................................................................... 10
对业务增长速度和稳定性的要求 ........................................................................ 11
API 经济的崛起 .................................................................................................. 11
云计算的机会和成本 ........................................................................................... 12
模块化归来 :拥抱更小的服务 ............................................................................ 12
对持续交付的影响 .............................................................................................. 13
Java 部署平台的演化 ......................................................................... 13
WAR 和 EAR :应用服务器统治的年代 .............................................................. 13
可执行的胖 JAR 文件 :十二要素风格应用的出现 ............................................. 14
容器镜像 :不断增加的可移植性(以及复杂性)................................................ 15
函数即服务 :“无服务器”架构的出现 ............................................................... 16
平台对持续交付的影响 ....................................................................................... 17
DevOps、SRE 和发布工程 ......................................................................................... 17
研发和运维.......................................................................................................... 18
站点可靠性工程 .................................................................................................. 19
发布工程 ............................................................................................................. 21
共享责任、指标和可观察性 ............................................................................... 22
总结 ............................................................................................................................ 22
第 3 章 设计持续交付的架构..........................................................24
优秀架构的基础 .......................................................................................................... 24
松耦合 ................................................................................................................. 25
高内聚 ................................................................................................................. 25
耦合、内聚和持续交付 ....................................................................................... 26
面向业务敏捷的架构 .................................................................................................. 27
不好的架构会限制业务的发展 ............................................................................ 27
复杂性和变更成本 .............................................................................................. 28
API 驱动的应用程序的最佳实践 ................................................................................ 29
“自上而下”构建 API ......................................................................................... 29
良好的 API 有助于持续测试和集成 .................................................................... 29
部署平台和架构 .......................................................................................................... 30
设计符合“十二要素”的云原生应用程序 ......................................................... 30
培养机械同理心 .................................................................................................. 33
面向失败的设计和持续测试 ............................................................................... 33
越来越小的服务 .......................................................................................................... 34
交付单体应用程序的挑战 ................................................................................... 34
微服务 :当 SOA 遇到领域驱动设计 .................................................................. 35
函数、lambda 表达式和纳米服务(Nanoservices)............................................. 36
架构 :“难以改变的东西”........................................................................................... 37
总结 ............................................................................................................................ 38
第 4 章 Java 应用的部署平台、基础设施以及持续交付......................39
由平台提供的功能性 .................................................................................................. 39
基本的开发流程 .......................................................................................................... 40
传统的基础设施平台 .................................................................................................. 41
传统的平台组件 .................................................................................................. 41
传统基础设施平台面临的挑战 ............................................................................ 41
传统基础设施的好处 ........................................................................................... 42
传统基础设施平台上的 CI / CD .......................................................................... 42
云平台 ......................................................................................................................... 43
深入云计算.......................................................................................................... 43
云计算面临的挑战 .............................................................................................. 45
云计算的好处 ...................................................................................................... 46
云计算中的持续交付 ........................................................................................... 47
平台即服务 ................................................................................................................. 47
简单了解 PaaS 的原理 ......................................................................................... 48
PaaS 平台面临的挑战.......................................................................................... 48
PaaS 的好处 ........................................................................................................ 50
CI/CD 和 PaaS ..................................................................................................... 50
容器(Docker)........................................................................................................... 50
容器平台组件 ...................................................................................................... 51
容器面临的挑战 .................................................................................................. 52
容器的好处.......................................................................................................... 53
持续交付容器 ...................................................................................................... 53
Kubernetes ................................................. 53
Kubernetes 的核心概念 ....................................................................................... 54
Kubernetes 面临的挑战 ....................................................................................... 54
Kubernetes 的好处 ............................................................................................... 55
Kubernetes 的持续交付 ....................................................................................... 56
函数即服务 / 无服务器函数 ........................................................................................ 56
FaaS 的概念 ........................................................................................................ 57
FaaS 面临的挑战 ................................................................................................. 57
FaaS 的好处 ........................................................................................................ 58
CI/CD 和 FaaS ..................................................................................................... 59
使用基础设施即代码 .................................................................................................. 59
总结 ............................................................................................................................ 60
第 5 章 构建 Java 应用程序..........................................................61
分解构建过程 ............................................................................................................. 61
自动化构建过程 .......................................................................................................... 62
构建依赖 ............................................................................................................. 63
外部依赖 ............................................................................................................. 66
多模块项目.......................................................................................................... 67
使用多代码库还是单代码库 ............................................................................... 67
插件 ..................................................................................................................... 68
发布和公开构件 .................................................................................................. 69
Java 构建工具概述 ...................................................................................................... 69
Ant ...................................................................................................................... 69
Maven .................................................................................................................. 72
Gradle .................................................................................................................. 77
Bazel、Pants 和 Buck .......................................................................................... 80
其他 JVM 构建工具 :S *** 和 Leiningen ............................................................. 82
Make ................................................................................................................... 82
如何选择一个构建工具............................................................................................... 83
总结 ............................................................................................................................ 84
第 6 章 其他构建工具和技巧..........................................................86
Linux、Bash 和基本的 CLI 命令 ................................................................................ 86
用户、权限和组 .................................................................................................. 86
使用文件系统 ...................................................................................................... 90
查看和编辑文本 .................................................................................................. 92
将所有东西连在一起 :重定向、管道和过滤器 .................................................. 93
搜索和操作文本 :grep、awk 和 sed ................................................................... 94
诊断工具 :top、ps、netstat 和 iostat .................................................................. 95
HTTP 调用和 *** ON 操作 ............................................................................................ 96
curl ...................................................................................................................... 96
HTTPie .............................................................................................................. 100
jq ....................................................................................................................... 104
编写基础脚本 ........................................................................................................... 105
xargs .................................................................................................................. 105
管道和过滤器 .................................................................................................... 105
循环 ................................................................................................................... 106
条件 ................................................................................................................... 106
总结 .......................................................................................................................... 107
第 7 章 打包应用程序.................................................................108
构建一个 JAR 文件 :循序渐进 ................................................................................ 108
构建一个可执行的胖 JAR 文件 ................................................................................ 112
Maven Shade 插件 ............................................................................................. 113
构建 Spring Boot Uber JAR 文件 ...................................................................... 116
瘦 JAR 文件—为什么我们决定不使用胖 JAR ...................................................... 117
构建 WAR 文件 ......................................................................................................... 118
在云平台上打包 ........................................................................................................ 120
将部署比作烹饪 :烘焙式部署还是煎炸式部署 ................................................ 120
构建 RPM 和 DEB OS 包 .................................................................................. 121
其他构建 OS 包的工具(支持 Windows)......................................................... 124
使用 Packer 创建可在多个云平台部署的机器镜像 ........................................... 126
创建机器镜像的其他工具 ................................................................................. 129
构建容器 ................................................................................................................... 129
创建 Docker 容器镜像 ....................................................................................... 130
使用 fabric8 制作 Docker 镜像 .......................................................................... 131
打包 FaaS Java 应用程序 .......................................................................................... 132
总结 .......................................................................................................................... 135
第 8 章 在本地环境中工作(就像在生产环境中一样)........................136
本地开发面临的挑战 ................................................................................................ 136
mock、stub 和服务虚拟化 ........................................................................................ 137
模式 #1 :profile、mock 和 stub ........................................................................ 137
使用 Mockito 进行 mock ................................................................................... 138
模式 #2 :服务虚拟化和 API 仿真 .................................................................... 140
使用 Hoverfly 虚拟化服务 ................................................................................ 141
虚拟机 :Vagrant 和 Packer ....................................................................................... 145
安装 Vagrant ...................................................................................................... 145
创建一个 Vagrantfile ......................................................................................... 145
模式 #3 :生产环境镜像 .................................................................................... 148
容器 :Kubernetes、minikube 和 Telepresence ......................................................... 149
介绍 Docker Java Shop 示例程序 ...................................................................... 149
构建 Java 应用程序和容器镜像 ........................................................................ 150
部署到 Kubernetes 平台 .................................................................................... 152
简单的冒烟测试 ................................................................................................ 155
构建剩余的应用程序 ......................................................................................... 155
在 Kubernetes 上部署整个 Java 应用程序 ......................................................... 155
查看部署的应用程序 ......................................................................................... 156
Telepresence :在本地远程工作 ........................................................................ 157
模式 #4 :环境租赁 ........................................................................................... 160
FaaS :AWS Lamba 和 SAM Local ........................................................................... 160
安装 SAM Local ................................................................................................ 161
AWS Lambda 脚手架......................................................................................... 161
测试 AWS Lambda 事件处理 ............................................................................ 165
SAM Local 冒烟测试 ........................................................................................ 168
FaaS: Azure Functions 和 VS Code ........................................................................... 170
安装 Azure Functions Core Tools ...................................................................... 170
在本地构建和测试函数 ..................................................................................... 173
使用 VS Code 进行本地和远程测试 ................................................................. 176
总结 .......................................................................................................................... 177
第 9 章 持续集成 :创建构建管道的之一步.....................................178
为什么要持续集成 .................................................................................................... 178
如何实施 CI .............................................................................................................. 179
中心化与分布式的版本控制系统 .............................................................................. 179
Git 入门..................................................................................................................... 180
核心的 Git CLI 命令 .......................................................................................... 181
Hub :一个 Git 和 GitHub 必备的工具 .............................................................. 183
有效地使用 DVCS .................................................................................................... 185
基于主干的开发 ................................................................................................ 185
基于功能分支的开发 ......................................................................................... 186
Gitflow .............................................................................................................. 186
没有万全之策 :如何选择分支策略 .................................................................. 187
代码审查 ................................................................................................................... 189
我们要寻找什么 ................................................................................................ 190
代码审查自动化 :PMD、Checkstyle 和 FindBugs ........................................... 191
审查 pull request ................................................................................................ 196
自动化构建 ............................................................................................................... 197
Jenkins ............................................................................................................... 197
发动你的团队 ........................................................................................................... 199
定期合并代码 .................................................................................................... 199
“停下来”:管理失败的构建 ............................................................................. 199
不要在测试上使用 @Ignore .............................................................................. 199
保持快速的构建过程 ......................................................................................... 200
平台(基础设施即代码)的 CI ................................................................................ 200
总结 .......................................................................................................................... 201
第 10 章 通过管道进行部署和发布................................................202
介绍 Extended Java Shop 应用程序 .......................................................................... 202
分离部署和发布 ........................................................................................................ 204
部署应用程序 ........................................................................................................... 205
创建一个容器镜像 ............................................................................................ 206
部署机制 ........................................................................................................... 209
一切都开始于(并且结束于)健康检查 ........................................................... 218
部署策略 ........................................................................................................... 222
使用非托管的集群 ............................................................................................ 232
更改数据库........................................................................................................ 236
发布功能 ................................................................................................................... 240
功能开关 ........................................................................................................... 240
语义版本控制 .................................................................................................... 243
API 的向后兼容性和版本 .................................................................................. 244
多阶段升级........................................................................................................ 249
管理配置和敏感信息 ................................................................................................ 250
“打包式”配置 .................................................................................................. 250
外部配置 ........................................................................................................... 251
处理敏感信息 .................................................................................................... 252
总结 .......................................................................................................................... 253
第 11 章 功能性测试 :正确和接受度.............................................254
为什么要测试软件 .................................................................................................... 254
测试什么?敏捷测试象限介绍 ................................................................................. 254
持续测试 ................................................................................................................... 256
构建正确的反馈循环 ......................................................................................... 256
无尽的海龟 ............................................................................................................... 257
人为交易 ................................................................................................................... 258
端到端测试 ............................................................................................................... 259
验收测试 ................................................................................................................... 261
行为驱动开发 .................................................................................................... 261
stub 或者虚拟化第三方服务.............................................................................. 265
将所有这些整合在一起 ..................................................................................... 265
消费者驱动的合约 .................................................................................................... 265
RESTful API 合约 ............................................................................................. 267
消息合约 ........................................................................................................... 269
组件测试 ................................................................................................................... 271
嵌入式数据存储 ................................................................................................ 271
内存消息队列 .................................................................................................... 272
测试替代 ........................................................................................................... 273
创建内部资源或接口 ......................................................................................... 274
进程内和进程外 ................................................................................................ 275
集成测试 ................................................................................................................... 277
验证外部交互 .................................................................................................... 278
测试容错性........................................................................................................ 278
单元测试 ................................................................................................................... 279
交互型单元测试 ................................................................................................ 280
独立型单元测试 ................................................................................................ 281
处理不可预知的测试 ................................................................................................ 282
数据 ................................................................................................................... 282
还未准备好的资源 ............................................................................................ 283
不确定性事件 .................................................................................................... 283
如果你什么都做不了 ......................................................................................... 284
自上而下的测试和自下而上的测试 .......................................................................... 284
自上而下的测试 ................................................................................................ 285
自下而上的测试 ................................................................................................ 286
将所有内容都融入构建管道 ..................................................................................... 287
多少测试才够 ........................................................................................................... 288
总结 .......................................................................................................................... 289
第 12 章 系统质量属性测试 :验证非功能性需求..............................291
为什么要测试非功能性需求 ..................................................................................... 291
代码质量 ................................................................................................................... 292
架构质量 ................................................................................................................... 292
ArchUnit :架构方面的单元测试 ...................................................................... 292
使用 JDepend 生成设计质量指标 ...................................................................... 295
性能和压力测试 ........................................................................................................ 297
使用 Apache Benchmark 进行基本的性能测试 ................................................. 298
使用 Gatling 进行压力测试 ............................................................................... 299
安全、漏洞和威胁 .................................................................................................... 305
代码级别的安全验证 ......................................................................................... 306
依赖项验证........................................................................................................ 311
与部署平台相关的安全问题 ............................................................................. 315
后续步骤 :威胁建模 ......................................................................................... 318
混乱测试 ................................................................................................................... 321
在生产环境中制造混乱(引入猴子)................................................................ 322
在预发布环境中造成混乱 ................................................................................. 324
需要多少非功能性测试才够 ..................................................................................... 325
总结 .......................................................................................................................... 326
第 13 章 可观察性 :监控、日志和跟踪..........................................327
可观察性和持续交付 ................................................................................................ 327
为什么要观察应用程序 ..................................................................................... 327
我们希望监控 :应用程序、 *** 和机器 ........................................................... 329
如何观察 :监控、日志和跟踪 .......................................................................... 330
报警 ................................................................................................................... 330
面向可观察性的系统设计 ......................................................................................... 332
指标 .......................................................................................................................... 332
指标的类型........................................................................................................ 333
Dropwizard Metrics ........................................................................................... 333
Spring Boot Actuator ......................................................................................... 335
Micrometer ........................................................................................................ 336
使用指标的最佳实践 ......................................................................................... 337
日志 .......................................................................................................................... 337
日志的形式........................................................................................................ 337
SLF4J ................................................................................................................ 339
Log4j 2 .............................................................................................................. 340
日志的最佳实践 ................................................................................................ 341
请求跟踪 ................................................................................................................... 342
trace、span 和 baggage ...................................................................................... 342
Java 跟踪工具 :OpenZipkin、Spring Sleuth 和 OpenCensus ............................ 343
分布式跟踪的推荐实践 ..................................................................................... 344
异常跟踪 ................................................................................................................... 344
Airbrake ............................................................................................................ 346
系统监控工具 ........................................................................................................... 347
collectd .............................................................................................................. 347
rsyslog ............................................................................................................... 347
Sensu ................................................................................................................. 348
收集和存储 ............................................................................................................... 348
Prometheus ........................................................................................................ 349
Elastic-Logstash-Kibana .................................................................................... 349
可视化 ....................................................................................................................... 350
业务可视化........................................................................................................ 350
运维可视化........................................................................................................ 351
开发可视化........................................................................................................ 353
总结 .......................................................................................................................... 354
第 14 章 迁移到持续交付............................................................355
持续交付能力 ........................................................................................................... 355
选择你要迁移的项目 ................................................................................................ 356
情景感知 ................................................................................................................... 357
Cynefin 框架和持续交付 ................................................................................... 358
所有模型都是错误的,有些是有用的............................................................... 359
开展持续交付 ........................................................................................................... 359
测量持续交付 ........................................................................................................... 360
从小处开始,尝试、学习、分享,然后重复整个过程 ............................................ 362
增加推广范围 :领导变革 ......................................................................................... 363
其他的指导和提示 .................................................................................................... 365
不良实践和常见的反模式 ................................................................................. 365
丑陋的架构 :改还是不改 ................................................................................. 365
总结 .......................................................................................................................... 367
第 15 章 持续交付和持续改进......................................................369
从现在开始 ............................................................................................................... 369
建立扎实的技术基础 ................................................................................................ 369
持续交付价值(最重要的目标)............................................................................... 370
增加软件的共享责任 ................................................................................................ 371
促进快速反馈和实验 ................................................................................................ 371
在组织中开展持续交付............................................................................................. 372
持续改进 ................................................................................................................... 372
总结 .......................................................................................................................... 373
留言评论
暂无留言