类似推荐
编辑推荐
本书以实践为基础,帮助Java开发人员掌握针对不同平台的架构设计、自动化质量保证,以及打包和部署的技巧。
内容简介
本书完整介绍了Java软件开发的整个生命周期,还结合大量的成功实践经验,介绍了每个阶段可能会使用到的工具和技能。在基础设施已经极大完善的今天,本书还与时俱进地介绍了如何在Docker、Kubernetes、Cloud、FaaS等新兴环境下进行持续集成和持续交付。
作者简介
作者丹尼尔·布莱恩特,是Datawire的独立技术顾问和产品架构师。他专注于通过发现价值流、创建构建管道以及实施有效的测试策略,在组织内实施持续交付。丹尼尔在技术上擅长DevOps工具、云计算/容器平台和微服务实现。他还是一名Java社区领袖,为几个开源项目做出过贡献,也为InfoQ、O’Reilly和Voxxed撰写文章,并且会定期出席OSCON、QCon和JavaOne等国际会议。
章节目录
版权信息
内容简介
O'Reilly Media, Inc.介绍
业界评论
译者序
序一
序二
前言
为什么我们要写这本书
为什么你应该阅读本书
这本书不包括什么内容
本书中使用的排版规范
斜体(Italic)
等宽字体(Constant width)
如何使用代码示例
O'Reilly Safari
联系我们
感谢
【读者服务】
第1章 持续交付:为什么需要持续交付,什么是持续交付
入门知识
赋能开发者:为什么我们要持续交付
快速反馈会减少上下文切换
自动化的、可重复的以及可靠的发布
定义“完成”的概念
什么是构建管道
核心的构建管道阶段
容器技术的影响
对当前架构的影响
总结
第2章 Java开发的演化
现代Java应用程序的需求
对业务增长速度和稳定性的要求
API经济的崛起
云计算的机会和成本
模块化归来:拥抱更小的服务
对持续交付的影响
Java部署平台的演化
WAR和EAR:应用服务器统治的年代
可执行的胖JAR文件:十二要素风格应用的出现
容器镜像:不断增加的可移植性(以及复杂性)
函数即服务:“无服务器”架构的出现
平台对持续交付的影响
DevOps、SRE和发布工程
研发和运维
站点可靠性工程
发布工程
共享责任、指标和可观察性
总结
第3章 设计持续交付的架构
优秀架构的基础
松耦合
高内聚
耦合、内聚和持续交付
面向业务敏捷的架构
不好的架构会限制业务的发展
复杂性和变更成本
API驱动的应用程序的最佳实践
“自上而下”构建API
良好的API有助于持续测试和集成
部署平台和架构
设计符合“十二要素”的云原生应用程序
培养机械同理心
面向失败的设计和持续测试
越来越小的服务
交付单体应用程序的挑战
微服务:当SOA遇到领域驱动设计
函数、lambda表达式和纳米服务(Nanoservices)
架构:“难以改变的东西”
总结
第4章 Java应用的部署平台、基础设施以及持续交付
由平台提供的功能性
基本的开发流程
传统的基础设施平台
传统的平台组件
传统基础设施平台面临的挑战
传统基础设施的好处
传统基础设施平台上的CI / CD
云平台
深入云计算
云计算面临的挑战
云计算的好处
云计算中的持续交付
平台即服务
简单了解PaaS的原理
PaaS平台面临的挑战
PaaS的好处
CI/CD和PaaS
容器(Docker)
容器平台组件
容器面临的挑战
容器的好处
持续交付容器
Kubernetes
Kubernetes的核心概念
Kubernetes面临的挑战
Kubernetes的好处
Kubernetes的持续交付
函数即服务/无服务器函数
FaaS的概念
FaaS面临的挑战
FaaS的好处
CI/CD和FaaS
使用基础设施即代码
总结
第5章 构建Java应用程序
分解构建过程
自动化构建过程
构建依赖
外部依赖
多模块项目
使用多代码库还是单代码库
插件
发布和公开构件
Java构建工具概述
Ant
Maven
Gradle
Bazel、Pants和Buck
其他JVM构建工具:SBT和Leiningen
Make
如何选择一个构建工具
总结
第6章 其他构建工具和技巧
Linux、Bash和基本的CLI命令
用户、权限和组
使用文件系统
查看和编辑文本
将所有东西连在一起:重定向、管道和过滤器
搜索和操作文本:grep、awk和sed
诊断工具:top、ps、netstat和iostat
HTTP调用和JSON操作
curl
HTTPie
jq
编写基础脚本
xargs
管道和过滤器
循环
条件
总结
第7章 打包应用程序
构建一个JAR文件:循序渐进
构建一个可执行的胖JAR文件
Maven Shade插件
构建Spring Boot Uber JAR文件
瘦JAR文件
构建WAR文件
在云平台上打包
将部署比作烹饪:烘焙式部署还是煎炸式部署
构建RPM和DEB OS包
其他构建OS包的工具(支持Windows)
使用Packer创建可在多个云平台部署的机器镜像
创建机器镜像的其他工具
构建容器
创建Docker容器镜像
使用fabric8制作Docker镜像
打包FaaS Java应用程序
总结
第8章 在本地环境中工作(就像在生产环境中一样)
本地开发面临的挑战
mock、stub和服务虚拟化
模式#1:profile、mock和stub
使用Mockito进行mock
模式#2:服务虚拟化和API 仿真
使用Hoverfly虚拟化服务
虚拟机:Vagrant和Packer
安装Vagrant
创建一个Vagrantfile
模式#3:生产环境镜像
容器:Kubernetes、minikube和Telepresence
介绍Docker Java Shop示例程序
构建Java应用程序和容器镜像
部署到Kubernetes平台
简单的冒烟测试
构建剩余的应用程序
在Kubernetes上部署整个Java应用程序
查看部署的应用程序
Telepresence:在本地远程工作
模式#4:环境租赁
FaaS:AWS Lambda和SAM Local
安装SAM Local
AWS Lambda脚手架
测试AWS Lambda事件处理
SAM Local 冒烟测试
FaaS: Azure Functions和VS Code
安装Azure Functions Core Tools
在本地构建和测试函数
使用VS Code进行本地和远程测试
总结
第9章 持续集成:创建构建管道的第一步
为什么要持续集成
如何实施CI
中心化与分布式的版本控制系统
Git入门
核心的Git CLI命令
Hub:一个Git和GitHub必备的工具
有效地使用DVCS
基于主干的开发
基于功能分支的开发
Gitflow
没有万全之策:如何选择分支策略
代码审查
我们要寻找什么
代码审查自动化:PMD、Checkstyle和FindBugs
审查pull request
自动化构建
Jenkins
发动你的团队
定期合并代码
“停下来”:管理失败的构建
不要在测试上使用@Ignore
保持快速的构建过程
平台(基础设施即代码)的CI
总结
第10章 通过管道进行部署和发布
介绍Extended Java Shop应用程序
分离部署和发布
部署应用程序
创建一个容器镜像
部署机制
使用Helm来打包Kubernetes应用程序
一切都开始于(并且结束于)健康检查
部署策略
使用非托管的集群
更改数据库
发布功能
功能开关
语义版本控制
API的向后兼容性和版本
多阶段升级
管理配置和敏感信息
“打包式”配置
外部配置
处理敏感信息
总结
第11章 功能性测试:正确和接受度
为什么要测试软件
测试什么?敏捷测试象限介绍
持续测试
构建正确的反馈循环
无尽的海龟
人为交易
端到端测试
验收测试
行为驱动开发
stub或者虚拟化第三方服务
将所有这些整合在一起
消费者驱动的合约
RESTful API 合约
消息合约
组件测试
嵌入式数据存储
内存消息队列
测试替代
创建内部资源或接口
进程内和进程外
集成测试
验证外部交互
测试容错性
单元测试
交互型单元测试
独立型单元测试
处理不可预知的测试
数据
还未准备好的资源
不确定性事件
如果你什么都做不了
自上而下的测试和自下而上的测试
自上而下的测试
自下而上的测试
将所有内容都融入构建管道
多少测试才够
总结
第12章 系统质量属性测试:验证非功能性需求
为什么要测试非功能性需求
代码质量
架构质量
ArchUnit:架构方面的单元测试
使用JDepend生成设计质量指标
性能和压力测试
使用Apache Benchmark进行基本的性能测试
使用Gatling进行压力测试
安全、漏洞和威胁
代码级别的安全验证
依赖项验证
与部署平台相关的安全问题
后续步骤:威胁建模
混乱测试
在生产环境中制造混乱(引入猴子)
在预发布环境中造成混乱
需要多少非功能性测试才够
总结
第13章 可观察性:监控、日志和跟踪
可观察性和持续交付
为什么要观察应用程序
我们希望监控:应用程序、网络和机器
如何观察:监控、日志和跟踪
报警
面向可观察性的系统设计
指标
指标的类型
Dropwizard Metrics
Spring Boot Actuator
Micrometer
使用指标的最佳实践
日志
日志的形式
SLF4J
Log4j 2
日志的最佳实践
请求跟踪
trace、span和baggage
Java跟踪工具:OpenZipkin、Spring Sleuth和OpenCensus
分布式跟踪的推荐实践
异常跟踪
Airbrake
系统监控工具
collectd
rsyslog
Sensu
收集和存储
Prometheus
Elastic-Logstash-Kibana
可视化
业务可视化
运维可视化
开发可视化
总结
第14章 迁移到持续交付
持续交付能力
选择你要迁移的项目
情景感知
Cynefin框架和持续交付
所有模型都是错误的,有些是有用的
开展持续交付
测量持续交付
从小处开始,尝试、学习、分享,然后重复整个过程
增加推广范围:领导变革
领导力是一项很有价值的技能
其他的指导和提示
不良实践和常见的反模式
丑陋的架构:改还是不改
总结
第15章 持续交付和持续改进
从现在开始
建立扎实的技术基础
持续交付价值(最重要的目标)
增加软件的共享责任
促进快速反馈和实验
在组织中开展持续交付
持续改进
总结
关于作者
关于封面
Java持续交付是2019年由电子工业出版社出版,作者。
得书感谢您对《Java持续交付》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。