持續(xù)集成與持續(xù)交付實(shí)戰(zhàn):用Jenkins、Travis CI和CircleCI構(gòu)建和發(fā)布大規(guī)模高質(zhì)量軟件
定 價(jià):89.9 元
- 作者:[美]讓-馬塞爾·貝爾蒙特(Jean-Marcel Belmont)
- 出版時(shí)間:2022/5/1
- ISBN:9787115584724
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.52
- 頁碼:300
- 紙張:
- 版次:01
- 開本:16開
本書是一本持續(xù)集成與持續(xù)交付(CI/CD)實(shí)踐指南,全書共15章。書中首先介紹持續(xù)集成和持續(xù)交付的基礎(chǔ)知識(shí),并介紹Jenkins用戶界面及其安裝方式;接下來介紹使用Jenkins UI開發(fā)插件、構(gòu)建Jenkins流水線和運(yùn)行Docker集成的實(shí)際操作;最后介紹Travis CI和CircleCI的安裝及腳本運(yùn)行等,幫助讀者通過Travis CI和CircleCI獲得有關(guān)CI/CD的廣泛知識(shí)。
本書適合系統(tǒng)管理員、DevOps工程師以及構(gòu)建和發(fā)布工程師閱讀。通過閱讀本書,讀者能了解CI/CD的概念,并獲得使用CI/CD生態(tài)系統(tǒng)中重要工具的實(shí)踐經(jīng)驗(yàn)。
本書從持續(xù)集成(CI)和持續(xù)交付(CD)的基礎(chǔ)知識(shí)以及它們?cè)?DevOps 生態(tài)系統(tǒng)中的位置入手,證明利益相關(guān)者協(xié)作作為 CI/CD 一部分的重要性。
隨著章節(jié)的深入,讀者將接觸 Jenkins UI,學(xué)習(xí)在不同平臺(tái)上安裝 Jenkins、添加插件和編寫自由風(fēng)格腳本,獲得使用Jenkins UI 開發(fā)插件、構(gòu)建 Jenkins 2.0 流水線和進(jìn)行 Docker 集成的實(shí)踐經(jīng)驗(yàn),學(xué)會(huì)安裝 Travis CI 和 CircleCI,進(jìn)行腳本編寫、日志記錄與調(diào)試,通過 Travis CI 和 CircleCI 獲得有關(guān) CI/CD 的廣泛知識(shí)。
本書將詳細(xì)介紹 CI/CD 生態(tài)系統(tǒng)的實(shí)踐并指導(dǎo)讀者實(shí)施。
本書涵蓋的主要內(nèi)容:
■ 在不同的操作系統(tǒng)上安裝 Jenkins;
■ 學(xué)習(xí) Jenkins 自由風(fēng)格腳本、流水線語法和方法論;
■ 探索 Travis CI 構(gòu)建生命周期事件和多種構(gòu)建編程語言;
■ 掌握 Travis CI CLI,并使用 CLI 將任務(wù)自動(dòng)化;
■ 使用 CircleCI CLI 作業(yè),學(xué)習(xí)流水線;
■ 使用 CircleCI CLI 將任務(wù)自動(dòng)化,學(xué)習(xí)調(diào)試和故障排除;
■ 學(xué)習(xí)開源工具,如 Git 和 GitHub;
■ 安裝 Docker,學(xué)習(xí) shell 腳本編寫中的相關(guān)概念。
讓-馬塞爾·貝爾蒙特(Jean-Marcel Belmont)是一位對(duì)自動(dòng)化和持續(xù)集成充滿熱情的軟件工程師。他積極參與開源社區(qū),經(jīng)常參加各類不同主題的軟件開發(fā)研討會(huì)。他主持著多個(gè)開發(fā)小組,提倡整潔代碼模式和軟件匠藝。
第 1 章 具有自動(dòng)測(cè)試功能的 CI/CD 1
1.1 業(yè)務(wù)場(chǎng)景 1
1.1.1 手動(dòng)流程——討論一種假設(shè)場(chǎng)景 2
1.1.2 雇員的困境 4
1.1.3 引入自動(dòng)化 6
1.1.4 開發(fā)人員生產(chǎn)力 10
1.1.5 打破溝通障礙 12
1.1.6 創(chuàng)造合作環(huán)境 15
1.2 小結(jié) 16
1.3 問題 16
第 2 章 持續(xù)集成基礎(chǔ) 17
2.1 技術(shù)要求 17
2.2 什么是持續(xù)集成 18
2.2.1 什么是軟件構(gòu)建 18
2.2.2 持續(xù)集成流程步驟概述 18
2.2.3 持續(xù)集成的價(jià)值 18
2.2.4 利用持續(xù)集成降低風(fēng)險(xiǎn) 19
2.2.5 源碼簽入時(shí)的軟件構(gòu)建 21
2.2.6 小型構(gòu)建和大型構(gòu)建故障 30
2.2.7 CI 構(gòu)建實(shí)踐 30
2.3 小結(jié) 32
2.4 問題 32
第 3 章 持續(xù)交付基礎(chǔ) 33
3.1 技術(shù)要求 33
3.2 軟件交付問題 33
3.2.1 軟件交付的含義 34
3.2.2 常見的版本發(fā)布反模式 34
3.2.3 如何進(jìn)行軟件發(fā)布 35
3.2.4 軟件交付自動(dòng)化的好處 36
3.3 配置管理 36
3.3.1 配置管理的含義 37
3.3.2 版本控制 37
3.3.3 依賴管理 38
3.3.4 軟件配置管理 40
3.3.5 環(huán)境管理 41
3.4 部署流水線 43
3.4.1 什么是部署流水線 43
3.4.2 部署流水線實(shí)踐 43
3.4.3 測(cè)試門 44
3.4.4 發(fā)布準(zhǔn)備 45
3.5 部署腳本編寫 46
3.5.1 構(gòu)建工具概述 46
3.5.2 部署腳本編寫概念 46
3.5.3 部署腳本編寫最佳實(shí)踐 47
3.6 部署生態(tài)系統(tǒng) 48
3.6.1 基礎(chǔ)設(shè)施工具 48
3.6.2 云提供商和工具 48
3.7 小結(jié) 49
3.8 問題 49
第 4 章 CI/CD 的業(yè)務(wù)價(jià)值 50
4.1 技術(shù)要求 50
4.2 溝通問題 50
4.2.1 需求傳達(dá)不當(dāng) 51
4.2.2 缺乏適當(dāng)?shù)奈臋n 51
4.2.3 時(shí)區(qū)差異 52
4.2.4 缺乏信任和相互尊重 52
4.2.5 文化差異和語言障礙 52
4.2.6 反饋周期長 53
4.3 與團(tuán)隊(duì)成員溝通痛點(diǎn) 53
4.3.1 等待需求信息 53
4.3.2 部署流水線中未記錄的步驟 54
4.3.3 王國鑰匙的持有者過多 54
4.3.4 溝通渠道過多 54
4.3.5 疼痛驅(qū)動(dòng)開發(fā) 55
4.4 不同團(tuán)隊(duì)間分擔(dān)責(zé)任 55
4.4.1 輪換團(tuán)隊(duì)成員 55
4.4.2 尋求有關(guān)開發(fā)實(shí)踐的反饋 56
4.4.3 建立跨職能團(tuán)隊(duì) 57
4.5 了解利益相關(guān)者 57
4.5.1 項(xiàng)目經(jīng)理 57
4.5.2 行政領(lǐng)導(dǎo)團(tuán)隊(duì) 58
4.5.3 終端用戶 58
4.6 證明 CI/CD 的重要性 59
4.6.1 指標(biāo)和報(bào)告 59
4.6.2 幫助領(lǐng)導(dǎo)者了解自動(dòng)化的重要性 59
4.7 獲得利益相關(guān)者對(duì) CI/CD 的批準(zhǔn) 60
4.7.1 開始一個(gè)臭鼬工廠項(xiàng)目 60
4.7.2 在本地計(jì)算機(jī)上啟動(dòng) CI/CD 60
4.7.3 公司內(nèi)部展示 60
4.7.4 午餐交流會(huì) 61
4.8 小結(jié) 61
4.9 問題 61
第 5 章 Jenkins 的安裝與基礎(chǔ) 62
5.1 技術(shù)要求 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 上運(yùn)行安裝程序 65
5.2.5 在 Windows 上用命令提示符啟動(dòng)和停止 Jenkins 66
5.3 在 Linux 上安裝 67
5.3.1 在 Ubuntu 上安裝 Jenkins 67
5.3.2 在 Ubuntu 上啟動(dòng) Jenkins 服務(wù) 67
5.3.3 打開網(wǎng)絡(luò)流量防火墻 68
5.3.4 首次登錄時(shí)解鎖 Jenkins 68
5.4 在 macOS 上安裝 70
5.4.1 下載 Jenkins 程序包 71
5.4.2 首次登錄時(shí)解鎖 Jenkins 73
5.4.3 通過 Homebrew 安裝 Jenkins 75
5.5 在本地運(yùn)行 Jenkins 76
5.5.1 創(chuàng)建一個(gè)新項(xiàng)目 76
5.5.2 控制臺(tái)輸出 79
5.6 管理 Jenkins 80
5.6.1 配置環(huán)境變量及工具 82
5.6.2 配置作業(yè)以輪詢 GitHub 版本控制存儲(chǔ)庫 83
5.7 小結(jié) 85
5.8 問題 85
第 6 章 編寫自由風(fēng)格腳本 86
6.1 技術(shù)要求 86
6.2 創(chuàng)建簡(jiǎn)單的自由風(fēng)格腳本 86
6.2.1 Jenkins 儀表盤指南 86
6.2.2 添加新的構(gòu)建作業(yè)項(xiàng) 87
6.2.3 構(gòu)建配置選項(xiàng) 88
6.3 配置自由風(fēng)格作業(yè) 89
6.3.1 General 標(biāo)簽頁 89
6.3.2 Source Code Management 標(biāo)簽頁 90
6.3.3 Build Triggers 標(biāo)簽頁 92
6.3.4 Build Environment 標(biāo)簽頁 93
6.3.5 Build 標(biāo)簽頁 93
6.3.6 Post-build Actions 標(biāo)簽頁 94
6.4 添加環(huán)境變量 95
6.4.1 全局環(huán)境變量的配置 95
6.4.2 EnvInject 插件 97
6.5 用自由風(fēng)格作業(yè)調(diào)試問題 98
6.5.1 歷史構(gòu)建總覽 98
6.5.2 用自由風(fēng)格腳本調(diào)試問題 100
6.6 小結(jié) 101
6.7 問題 101
第 7 章 開發(fā)插件 102
7.1 技術(shù)要求 102
7.2 Jenkins 插件的說明 102
7.2.1 插件為什么有用 102
7.2.2 Jenkins 插件文檔 103
7.2.3 在 Jenkins 中安裝插件 103
7.3 構(gòu)建簡(jiǎn)單的 Jenkins 插件 103
7.3.1 安裝 Java 103
7.3.2 Maven 安裝指南 104
7.4 Jenkins 插件的開發(fā) 107
7.4.1 Maven 設(shè)置文件 108
7.4.2 HelloWorld Jenkins 插件 109
7.4.3 目錄結(jié)構(gòu)說明 110
7.4.4 Jenkins 插件源碼說明 111
7.4.5 構(gòu)建 Jenkins 插件 113
7.4.6 安裝 Jenkins 插件 114
7.5 Jenkins 插件生態(tài)系統(tǒng) 115
7.6 小結(jié) 116
7.7 問題 116
第 8 章 使用 Jenkins 構(gòu)建流水線 118
8.1 技術(shù)要求 118
8.2 Jenkins 2.0 118
8.2.1 為什么要使用 Jenkins 2.0 119
8.2.2 在現(xiàn)有軟件上安裝 Blue Ocean 插件 119
8.2.3 通過 Jenkins Docker 鏡像來安裝 Blue Ocean 插件 119
8.2.4 查看 Blue Ocean 界面 122
8.3 Jenkins 流水線 123
8.3.1 創(chuàng)建 Jenkins 流水線 123
8.3.2 用流水線編輯器創(chuàng)建流水線 127
8.4 Jenkins Blue Ocean 操作說明 130
8.4.1 流水線視圖 130
8.4.2 流水線細(xì)節(jié)視圖 130
8.4.3 流水線構(gòu)建視圖 131
8.4.4 流水線階段視圖 132
8.4.5 Jenkins 流水線中的其他視圖 132
8.5 流水線語法 133
8.5.1 流水線編輯器 133
8.5.2 流水線語法文檔 134
8.6 小結(jié) 134
8.7 問題 134
第 9 章 Travis CI 的安裝與基礎(chǔ) 135
9.1 技術(shù)要求 135
9.2 Travis CI 的介紹 135
9.3 使用 Travis CI 的先決條件 136
9.3.1 創(chuàng)建 GitHub 賬號(hào) 136
9.3.2 創(chuàng)建 Travis CI 賬號(hào) 138
9.3.3 為新 GitHub 賬號(hào)添加 SSH 密鑰 140
9.4 添加簡(jiǎn)單的 Travis YAML 配置腳本 142
9.4.1 Travis YML 腳本內(nèi)容 142
9.4.2 為 Travis CI 賬號(hào)添加 GitHub 存儲(chǔ)庫 142
9.5 Travis CI 腳本各部分解析 145
9.5.1 選擇編程語言 145
9.5.2 選擇基礎(chǔ)設(shè)施 146
9.5.3 定制構(gòu)建 147
9.6 小結(jié) 152
9.7 問題 153
第 10 章 Travis CI 命令行命令及自動(dòng)化 154
10.1 技術(shù)要求 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 存儲(chǔ)庫命令 170
10.3.4 Travis Pro 和 Travis Enterprise 版本的 Travis CI 選項(xiàng) 179
10.4 小結(jié) 180
10.5 問題 180
第 11 章 Travis CI UI 日志記錄與調(diào)試 181
11.1 技術(shù)要求 181
11.2 Travis Web 客戶端概述 181
11.2.1 主控儀表盤概述 182
11.2.2 作業(yè)日志概述 183
11.3 用 Docker 在本地調(diào)試構(gòu)建 185
11.4 在調(diào)試模式下運(yùn)行構(gòu)建 187
11.4.1 從配置頁面獲取 API 令牌 187
11.4.2 從構(gòu)建日志獲取作業(yè) ID 188
11.4.3 從視圖配置按鈕的鏈接中獲取作業(yè) ID 188
11.4.4 通過直達(dá)/build 端點(diǎn)的 API 請(qǐng)求獲取作業(yè) ID 188
11.4.5 在調(diào)試模式下調(diào)用 API 來開始構(gòu)建作業(yè) 189
11.4.6 在調(diào)試模式下啟用 SSH 會(huì)話 190
11.4.7 Travis 調(diào)試模式中的便捷 Bash 函數(shù) 190
11.4.8 tmate shell 會(huì)話操作 192
11.5 Travis Web UI 日志 193
11.6 Travis CI 部署概述與調(diào)試 194
11.6.1 支持 Travis CI 的服務(wù)提供商 194
11.6.2 在 Travis CI 中設(shè)置 Heroku 195
11.6.3 調(diào)試 Travis YML 腳本中的錯(cuò)誤 196
11.7 小結(jié) 198
11.8 問題 198
第 12 章 CircleCI 的安裝與基礎(chǔ) 199
12.1 技術(shù)要求 199
12.2 CircleCI 簡(jiǎn)介 200
12.3 比較 CircleCI 和 Jenkins 200
12.4 使用 CircleCI 的先決條件 200
12.4.1 創(chuàng)建 GitHub 賬號(hào) 200
12.4.2 創(chuàng)建 Bitbucket 賬號(hào) 200
12.4.3 創(chuàng)建 CircleCI 賬號(hào) 203
12.5 在 GitHub 中設(shè)置 CircleCI 206
12.6 在 Bitbucket 中設(shè)置 CircleCI 212
12.7 CircleCI 配置概述 218
12.7.1 CircleCI 配置概念概述 218
12.7.2 向新存儲(chǔ)庫中添加源文件 219
12.7.3 新存儲(chǔ)庫的 CircleCI 構(gòu)建作業(yè) 220
12.8 小結(jié) 221
12.9 問題 221
第 13 章 CircleCI 命令行命令與自動(dòng)化 222
13.1 技術(shù)要求 222
13.2 CircleCI CLI 的安裝 222
13.2.1 在 macOS / Linux 上安裝 CircleCI CLI 223
13.2.2 通過 GitHub 安裝 CircleCI CLI 的每夜構(gòu)建版本 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 中的實(shí)際工作流 233
13.4.2 順序工作流示例 234
13.5 使用 CircleCI API 236
13.5.1 測(cè)試 CircleCI API 連接 236
13.5.2 用 CircleCI API 獲取單個(gè) Git 存儲(chǔ)庫的構(gòu)建摘要 237
13.5.3 用 jq 實(shí)用程序計(jì)算 CircleCI 構(gòu)建的某些指標(biāo) 237
13.6 小結(jié) 238
13.7 問題 238
第 14 章 CircleCI UI 日志記錄與調(diào)試 239
14.1 技術(shù)要求 239
14.2 作業(yè)日志概述 239
14.2.1 用默認(rèn)構(gòu)建作業(yè)運(yùn)行作業(yè)中的步驟 239
14.2.2 用工作流運(yùn)行作業(yè)中的步驟 246
14.2.3 用 CircleCI API 查找最新的構(gòu)建 URL 249
14.3 在 CircleCI 中調(diào)試慢速構(gòu)建 252
14.4 日志記錄和故障排除技術(shù) 256
14.5 小結(jié) 260
14.6 問題 261
第 15 章 最佳實(shí)踐 262
15.1 技術(shù)要求 262
15.2 CI/CD 中不同類型測(cè)試的最佳實(shí)踐 262
15.2.1 冒煙測(cè)試 263
15.2.2 單元測(cè)試 264
15.2.3 集成測(cè)試 266
15.2.4 系統(tǒng)測(cè)試 269
15.2.5 驗(yàn)收測(cè)試 269
15.2.6 在 CI/CD 流水線中運(yùn)行不同類型測(cè)試的最佳實(shí)踐 271
15.3 密碼和機(jī)密存儲(chǔ)中的最佳實(shí)踐 271
15.3.1 Vault 的安裝 272
15.3.2 機(jī)密管理的最佳實(shí)踐概述 275
15.4 部署中的最佳實(shí)踐 275
15.4.1 創(chuàng)建部署檢查清單 276
15.4.2 自動(dòng)化發(fā)布 276
15.4.3 部署腳本示例 276
15.4.4 部署腳本的最佳實(shí)踐 279
15.5 小結(jié) 280
15.6 問題 280