持續集成與持續交付實戰:用 Jenkins、Travis CI 和 CircleCI 構建和發布大規模高質量軟件 Hands-On Continuous Integration and Delivery: Build and release quality software at scale with Jenkins, TravisCI and CircleCI

[美]讓-馬塞爾·貝爾蒙特(Jean-Marcel Belmont)

  • 持續集成與持續交付實戰:用 Jenkins、Travis CI 和 CircleCI 構建和發布大規模高質量軟件-preview-1
  • 持續集成與持續交付實戰:用 Jenkins、Travis CI 和 CircleCI 構建和發布大規模高質量軟件-preview-2
持續集成與持續交付實戰:用 Jenkins、Travis CI 和 CircleCI 構建和發布大規模高質量軟件-preview-1

買這商品的人也買了...

商品描述

本書是一本持續集成與持續交付(CI/CD)實踐指南,全書共15章。書中首先介紹持續集成和持續交付的基礎知識,並介紹Jenkins用戶界面及其安裝方式;接下來介紹使用Jenkins UI開發插件、構建Jenkins流水線和運行Docker集成的實際操作;最後介紹Travis CI和CircleCI的安裝及腳本運行等,幫助讀者通過Travis CI和CircleCI獲得有關CI/CD的廣泛知識。

本書適合系統管理員、DevOps工程師以及構建和發布工程師閱讀。通過閱讀本書,讀者能瞭解CI/CD的概念,並獲得使用CI/CD生態系統中重要工具的實踐經驗。

作者簡介

让-马塞尔·贝尔蒙特(Jean-Marcel Belmont)是一位对自动化和持续集成充满热情的软件工程师。他积极参与开源社区,经常参加各类不同主题的软件开发研讨会。他主持着多个开发小组,提倡整洁代码模式和软件匠艺。

目錄大綱

第 1 章 具有自動測試功能的 CI/CD 1

1.1 業務場景 1

1.1.1 手動流程——討論一種假設場景 2

1.1.2 雇員的困境 4

1.1.3 引入自動化 6

1.1.4 開發人員生產力 10

1.1.5 打破溝通障礙 12

1.1.6 創造合作環境 15

1.2 小結 16

1.3 問題 16

第 2 章 持續集成基礎 17

2.1 技術要求 17

2.2 什麽是持續集成 18

2.2.1 什麽是軟件構建 18

2.2.2 持續集成流程步驟概述 18

2.2.3 持續集成的價值 18

2.2.4 利用持續集成降低風險 19

2.2.5 源碼簽入時的軟件構建 21

2.2.6 小型構建和大型構建故障 30

2.2.7 CI 構建實踐 30

2.3 小結 32

2.4 問題 32

第 3 章 持續交付基礎 33

3.1 技術要求 33

3.2 軟件交付問題 33

3.2.1 軟件交付的含義 34

3.2.2 常見的版本發布反模式 34

3.2.3 如何進行軟件發布 35

3.2.4 軟件交付自動化的好處 36

3.3 配置管理 36

3.3.1 配置管理的含義 37

3.3.2 版本控制 37

3.3.3 依賴管理 38

3.3.4 軟件配置管理 40

3.3.5 環境管理 41

3.4 部署流水線 43

3.4.1 什麽是部署流水線 43

3.4.2 部署流水線實踐 43

3.4.3 測試門 44

3.4.4 發布準備 45

3.5 部署腳本編寫 46

3.5.1 構建工具概述 46

3.5.2 部署腳本編寫概念 46

3.5.3 部署腳本編寫最佳實踐 47

3.6 部署生態系統 48

3.6.1 基礎設施工具 48

3.6.2 雲提供商和工具 48

3.7 小結 49

3.8 問題 49

第 4 章 CI/CD 的業務價值 50

4.1 技術要求 50

4.2 溝通問題 50

4.2.1 需求傳達不當 51

4.2.2 缺乏適當的文檔 51

4.2.3 時區差異 52

4.2.4 缺乏信任和相互尊重 52

4.2.5 文化差異和語言障礙 52

4.2.6 反饋周期長 53

4.3 與團隊成員溝通痛點 53

4.3.1 等待需求信息 53

4.3.2 部署流水線中未記錄的步驟 54

4.3.3 王國鑰匙的持有者過多 54

4.3.4 溝通渠道過多 54

4.3.5 疼痛驅動開發 55

4.4 不同團隊間分擔責任 55

4.4.1 輪換團隊成員 55

4.4.2 尋求有關開發實踐的反饋 56

4.4.3 建立跨職能團隊 57

4.5 瞭解利益相關者 57

4.5.1 項目經理 57

4.5.2 行政領導團隊 58

4.5.3 終端用戶 58

4.6 證明 CI/CD 的重要性 59

4.6.1 指標和報告 59

4.6.2 幫助領導者瞭解自動化的重要性 59

4.7 獲得利益相關者對 CI/CD 的批準 60

4.7.1 開始一個臭鼬工廠項目 60

4.7.2 在本地電腦上啟動 CI/CD 60

4.7.3 公司內部展示 60

4.7.4 午餐交流會 61

4.8 小結 61

4.9 問題 61

第 5 章 Jenkins 的安裝與基礎 62

5.1 技術要求 62

5.2 在 Windows 上安裝 62

5.2.1 安裝 Jenkins 的先決條件 62

5.2.2 Windows 安裝程序 63

5.2.3 在 Windows 上安裝 Jenkins 64

5.2.4 在 Windows 上運行安裝程序 65

5.2.5 在 Windows 上用命令提示符啟動和停止 Jenkins 66

5.3 在 Linux 上安裝 67

5.3.1 在 Ubuntu 上安裝 Jenkins 67

5.3.2 在 Ubuntu 上啟動 Jenkins 服務 67

5.3.3 打開網絡流量防火牆 68

5.3.4 首次登錄時解鎖 Jenkins 68

5.4 在 macOS 上安裝 70

5.4.1 下載 Jenkins 程序包 71

5.4.2 首次登錄時解鎖 Jenkins 73

5.4.3 通過 Homebrew 安裝 Jenkins 75

5.5 在本地運行 Jenkins 76

5.5.1 創建一個新項目 76

5.5.2 控制台輸出 79

5.6 管理 Jenkins 80

5.6.1 配置環境變量及工具 82

5.6.2 配置作業以輪詢 GitHub 版本控制存儲庫 83

5.7 小結 85

5.8 問題 85

第 6 章 編寫自由風格腳本 86

6.1 技術要求 86

6.2 創建簡單的自由風格腳本 86

6.2.1 Jenkins 儀表盤指南 86

6.2.2 添加新的構建作業項 87

6.2.3 構建配置選項 88

6.3 配置自由風格作業 89

6.3.1 General 標簽頁 89

6.3.2 Source Code Management 標簽頁 90

6.3.3 Build Triggers 標簽頁 92

6.3.4 Build Environment 標簽頁 93

6.3.5 Build 標簽頁 93

6.3.6 Post-build Actions 標簽頁 94

6.4 添加環境變量 95

6.4.1 全局環境變量的配置 95

6.4.2 EnvInject 插件 97

6.5 用自由風格作業調試問題 98

6.5.1 歷史構建總覽 98

6.5.2 用自由風格腳本調試問題 100

6.6 小結 101

6.7 問題 101

第 7 章 開發插件 102

7.1 技術要求 102

7.2 Jenkins 插件的說明 102

7.2.1 插件為什麽有用 102

7.2.2 Jenkins 插件文檔 103

7.2.3 在 Jenkins 中安裝插件 103

7.3 構建簡單的 Jenkins 插件 103

7.3.1 安裝 Java 103

7.3.2 Maven 安裝指南 104

7.4 Jenkins 插件的開發 107

7.4.1 Maven 設置文件 108

7.4.2 HelloWorld Jenkins 插件 109

7.4.3 目錄結構說明 110

7.4.4 Jenkins 插件源碼說明 111

7.4.5 構建 Jenkins 插件 113

7.4.6 安裝 Jenkins 插件 114

7.5 Jenkins 插件生態系統 115

7.6 小結 116

7.7 問題 116

第 8 章 使用 Jenkins 構建流水線 118

8.1 技術要求 118

8.2 Jenkins 2.0 118

8.2.1 為什麽要使用 Jenkins 2.0 119

8.2.2 在現有軟件上安裝 Blue Ocean 插件 119

8.2.3 通過 Jenkins Docker 鏡像來安裝 Blue Ocean 插件 119

8.2.4 查看 Blue Ocean 界面 122

8.3 Jenkins 流水線 123

8.3.1 創建 Jenkins 流水線 123

8.3.2 用流水線編輯器創建流水線 127

8.4 Jenkins Blue Ocean 操作說明 130

8.4.1 流水線視圖 130

8.4.2 流水線細節視圖 130

8.4.3 流水線構建視圖 131

8.4.4 流水線階段視圖 132

8.4.5 Jenkins 流水線中的其他視圖 132

8.5 流水線語法 133

8.5.1 流水線編輯器 133

8.5.2 流水線語法文檔 134

8.6 小結 134

8.7 問題 134

第 9 章 Travis CI 的安裝與基礎 135

9.1 技術要求 135

9.2 Travis CI 的介紹 135

9.3 使用 Travis CI 的先決條件 136

9.3.1 創建 GitHub 賬號 136

9.3.2 創建 Travis CI 賬號 138

9.3.3 為新 GitHub 賬號添加 SSH 密鑰 140

9.4 添加簡單的 Travis YAML 配置腳本 142

9.4.1 Travis YML 腳本內容 142

9.4.2 為 Travis CI 賬號添加 GitHub 存儲庫 142

9.5 Travis CI 腳本各部分解析 145

9.5.1 選擇編程語言 145

9.5.2 選擇基礎設施 146

9.5.3 定製構建 147

9.6 小結 152

9.7 問題 153

第 10 章 Travis CI 命令行命令及自動化 154

10.1 技術要求 154

10.2 Travis CLI 的安裝 154

10.2.1 在 Windows 上安裝 155

10.2.2 在 Linux 上安裝 156

10.2.3 在 macOS 上安裝 157

10.3 Travis CLI 命令 158

10.3.1 非 API 命令 158

10.3.2 API 命令 160

10.3.3 存儲庫命令 170

10.3.4 Travis Pro 和 Travis Enterprise 版本的 Travis CI 選項 179

10.4 小結 180

10.5 問題 180

第 11 章 Travis CI UI 日誌記錄與調試 181

11.1 技術要求 181

11.2 Travis Web 客戶端概述 181

11.2.1 主控儀表盤概述 182

11.2.2 作業日誌概述 183

11.3 用 Docker 在本地調試構建 185

11.4 在調試模式下運行構建 187

11.4.1 從配置頁面獲取 API 令牌 187

11.4.2 從構建日誌獲取作業 ID 188

11.4.3 從視圖配置按鈕的鏈接中獲取作業 ID 188

11.4.4 通過直達/build 端點的 API 請求獲取作業 ID 188

11.4.5 在調試模式下調用 API 來開始構建作業 189

11.4.6 在調試模式下啟用 SSH 會話 190

11.4.7 Travis 調試模式中的便捷 Bash 函數 190

11.4.8 tmate shell 會話操作 192

11.5 Travis Web UI 日誌 193

11.6 Travis CI 部署概述與調試 194

11.6.1 支持 Travis CI 的服務提供商 194

11.6.2 在 Travis CI 中設置 Heroku 195

11.6.3 調試 Travis YML 腳本中的錯誤 196

11.7 小結 198

11.8 問題 198

第 12 章 CircleCI 的安裝與基礎 199

12.1 技術要求 199

12.2 CircleCI 簡介 200

12.3 比較 CircleCI 和 Jenkins 200

12.4 使用 CircleCI 的先決條件 200

12.4.1 創建 GitHub 賬號 200

12.4.2 創建 Bitbucket 賬號 200

12.4.3 創建 CircleCI 賬號 203

12.5 在 GitHub 中設置 CircleCI 206

12.6 在 Bitbucket 中設置 CircleCI 212

12.7 CircleCI 配置概述 218

12.7.1 CircleCI 配置概念概述 218

12.7.2 向新存儲庫中添加源文件 219

12.7.3 新存儲庫的 CircleCI 構建作業 220

12.8 小結 221

12.9 問題 221

第 13 章 CircleCI 命令行命令與自動化 222

13.1 技術要求 222

13.2 CircleCI CLI 的安裝 222

13.2.1 在 macOS / Linux 上安裝 CircleCI CLI 223

13.2.2 通過 GitHub 安裝 CircleCI CLI 的每夜構建版本 223

13.3 CircleCI CLI 命令 224

13.3.1 version 命令 225

13.3.2 help 命令 226

13.3.3 config 命令 226

13.3.4 build 命令 228

13.3.5 step 命令 230

13.3.6 configure 命令 230

13.3.7 tests 命令 232

13.4 在 CircleCI 中使用工作流 232

13.4.1 CircleCI Web UI 中的實際工作流 233

13.4.2 順序工作流示例 234

13.5 使用 CircleCI API 236

13.5.1 測試 CircleCI API 連接 236

13.5.2 用 CircleCI API 獲取單個 Git 存儲庫的構建摘要 237

13.5.3 用 jq 實用程序計算 CircleCI 構建的某些指標 237

13.6 小結 238

13.7 問題 238

第 14 章 CircleCI UI 日誌記錄與調試 239

14.1 技術要求 239

14.2 作業日誌概述 239

14.2.1 用默認構建作業運行作業中的步驟 239

14.2.2 用工作流運行作業中的步驟 246

14.2.3 用 CircleCI API 查找最新的構建 URL 249

14.3 在 CircleCI 中調試慢速構建 252

14.4 日誌記錄和故障排除技術 256

14.5 小結 260

14.6 問題 261

第 15 章 最佳實踐 262

15.1 技術要求 262

15.2 CI/CD 中不同類型測試的最佳實踐 262

15.2.1 冒煙測試 263

15.2.2 單元測試 264

15.2.3 集成測試 266

15.2.4 系統測試 269

15.2.5 驗收測試 269

15.2.6 在 CI/CD 流水線中運行不同類型測試的最佳實踐 271

15.3 密碼和機密存儲中的最佳實踐 271

15.3.1 Vault 的安裝 272

15.3.2 機密管理的最佳實踐概述 275

15.4 部署中的最佳實踐 275

15.4.1 創建部署檢查清單 276

15.4.2 自動化發布 276

15.4.3 部署腳本示例 276

15.4.4 部署腳本的最佳實踐 279

15.5 小結 280

15.6 問題 280