Java持续交付

Java持续交付

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

本书以实践为基础,帮助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持续交付》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
Java编程动手学 电子书
本书共12章,首先介绍Java语言的基本情况;然后介绍如何在Windows、Linux和macOS三种操作系统中安装Java和集成开发环境以及JShell交互式编程;接着讲解Java的一些常见概念和数据类型以及Java的八大类运算符、各种表达式和语句;之后介绍类和对象这两个核心概念,数组与集合的概念和使用,Java常用工具类,以及Java的异常处理、注解以及泛型机制;最后讲解Java的文件与I/O
Java架构师指南 电子书
知名Java专家多年经验总结,介绍从程序员进阶到架构师需要具备的技能的完整教程 基于Java官方API的解读,从架构师的独特角度讲解Java知识和技能 企业级开发的经典示例,全程项目驱动,涵盖电商支付接口的综合调试 程序员走向架构师是必经之路。本书基于Java官方API进行解读,从架构师的角度讲解Java知识和技能,并从搭建虚拟机开始,学习常用的Linux命令,力争使程序员能在较短的时间内成功迈入架构师的殿堂。 近年来编程领域的知识愈加丰富,使广大程序员应接不暇。如何在有限的时间内高效学习是一个棘手的问题。本书作者根据自身的丰富经验,精选了Java中必须掌握的核心技能,并以项目为驱动,循序渐进,详细讲解了企业级项目和电商平台,让读者在学习知识的同时以实战加深印象,可谓是高屋建瓴。 如何能在短时间内达到架构师的水平?面对难以入手的海量知识,读者往往一头雾水,相信通过阅读本书,每位读者都能从中找到答案。
Java编程技术大全 电子书
本书内容全面、知识结构安排合理、以实例驱动学习,更以项目实战来总结书中所讲内容,易学、易用。
Java Web云应用开发 电子书
本书以开源的OpenStack技术为基础,按照“任务驱动、能力递进”的思路,以“Web云网盘项目”的开发为主线,全面介绍了使用JavaWeb技术开发Web云网盘系统的方法和主要步骤。本书将Web云网盘的项目分解为Web云网盘概要设计、开发环境搭建、JavaEE基础知识、云存储OpenStackSwift服务构建、开发登录注册模块、开发文件列表模块、开发文件操作模块、开发功能扩展模块、部署发布9个子
Java程序设计基础 电子书
本书较为全面地介绍了Java程序开发的相关基础知识。全书共8章,主要讲解了Java语言概述、Java基础语法、数组、面向对象程序设计——类和对象、类的继承、类的多态性、异常处理和常用的Java类。在各章节的末尾设置了实践任务、本章小结和习题练习等环节,帮助读者巩固所学的内容。本书可以作为高职高专院校计算机相关专业Java程序开发基础课程的教材使用,也适合相关专业初学者和广大计算机爱好者自学使用。