Java持續交付

Java持續交付

《Java持續交付》是2019年10月電子工業出版社出版的圖書,作者是張若飛。

基本介紹

  • 書名:Java持續交付
  • 作者:張若飛
  • ISBN:9787121374425 
  • 頁數:404
  • 定價:¥119.0
  • 出版社:電子工業出版社
  • 出版時間:2019年10月
  • 開本:16開
內容簡介,目錄,

內容簡介

本書完整介紹了Java軟體開發的整個生命周期,還結合大量的成功實踐經驗,介紹了每個階段可能會使用到的工具和技能。在基礎設施已經極大完善的今天,本書還與時俱進地介紹了如何在Docker、Kubernetes、Cloud、FaaS等新興環境下進行持續集成和持續交付。

目錄

第 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 構建工具 :SBT 和 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 調用和 JSON 操作 ............................................................................................ 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

相關詞條

熱門詞條

聯絡我們