Jenkins 2.x實踐指南(博文視點出品)

2021-05-18 21:32 更新

Jenkins 2.x實踐指南(博文視點出品)

翟志軍 著

  • 出版社: 電子工業(yè)出版社
  • ISBN:9787121360503
  • 版次:1
  • 商品編碼:12512889
  • 品牌:博文視點
  • 包裝:平裝
  • 開本:16
  • 出版時間:2019-04-01
  • 用紙:膠版紙
  • 頁數(shù):252
  • 字數(shù):350000

點此下載


編輯推薦

適讀人群 :希望通過Jenkins實現(xiàn)持續(xù)集成、持續(xù)交付、DevOps,以提升團隊生產(chǎn)力的技術人員和管理人員。

實戰(zhàn)Jenkins 2.x核心特性:pipeline as code|持續(xù)集成|持續(xù)交付|ChatOps|自動化運維

內(nèi)容簡介

《Jenkins 2.x 實踐指南》首先介紹筆者對軟件工程生產(chǎn)力的獨到見解,然后通過一個Hello world 示例帶領初學者入門Jenkins pipeline,接下來詳細介紹Jenkins pipeline 的語法,在Jenkins pipeline 中如何實現(xiàn)持續(xù)集成、持續(xù)交付的各個階段,包括構建、測試、制品管理、部署等,以及當現(xiàn)有pipeline 的步驟不能滿足需求時,擴展Jenkins pipeline 的多種方式。最后介紹Jenkins 如何整合多個第三方系統(tǒng),以實現(xiàn)ChatOps 及自動化運維;為避免讀者出現(xiàn)“不知從哪里下手”的情況,本書通過一個簡單的案例介紹如何設計pipeline。

《Jenkins 2.x 實踐指南》的讀者對象包括:希望通過Jenkins 實現(xiàn)持續(xù)集成、持續(xù)交付、DevOps,以提升團隊生產(chǎn)力的技術人員和管理人員。

目錄

1 關于軟件工程生產(chǎn)力1

1.1 從另一個角度看“提高軟件工程生產(chǎn)力” 1

1.1.1 從勞動力要素考慮提高軟件工程生產(chǎn)力 2

1.1.2 從勞動對象要素考慮提高軟件工程生產(chǎn)力 2

1.1.3 從生產(chǎn)工具要素考慮提高軟件工程生產(chǎn)力 3

1.1.4 生產(chǎn)力三要素的意義3

1.2 Jenkins 介紹 4

1.3 Jenkins 與DevOps 4

1.4 本章小結 5

2 pipeline 入門6

2.1 pipeline 是什么 6

2.2 Jenkinsfile 又是什么 7

2.3 pipeline 語法的選擇 7

2.4 創(chuàng)建第一個pipeline 9

2.5 從版本控制庫拉取pipeline 11

2.6 使用Maven 構建Java 應用 12

2.7 本章小結 15

3 pipeline 語法講解16

3.1 必要的Groovy 知識 16

3.2 pipeline 的組成 18

3.2.1 pipeline 最簡結構 18

3.2.2 步驟 19

3.3 post 部分 20

3.4 pipeline 支持的指令 21

3.5 配置pipeline 本身 22

3.6 在聲明式pipeline 中使用腳本 24

3.7 pipeline 內(nèi)置基礎步驟 25

3.7.1 文件目錄相關步驟 25

3.7.2 制品相關步驟 27

3.7.3 命令相關步驟 28

3.7.4 其他步驟 29

3.7.5 小貼士 31

3.8 本章小結 36

4 環(huán)境變量與構建工具37

4.1 環(huán)境變量 37

4.1.1 Jenkins 內(nèi)置變量 37

4.1.2 自定義pipeline 環(huán)境變量 38

4.1.3 自定義全局環(huán)境變量 39

4.2 構建工具 40

4.2.1 構建工具的選擇 40

4.2.2 tools 指令介紹 41

4.2.3 JDK 環(huán)境搭建 41

4.2.4 Maven 42

4.2.5 Go 語言環(huán)境搭建 45

4.2.6 Python 環(huán)境搭建 46

4.3 利用環(huán)境變量支持更多的構建工具 47

4.4 利用tools 作用域?qū)崿F(xiàn)多版本編譯 48

4.5 本章小結 49

5 代碼質(zhì)量50

5.1 靜態(tài)代碼分析 50

5.1.1 代碼規(guī)范檢查 50

5.1.2 使用PMD 進行代碼規(guī)范檢查 51

5.1.3 各靜態(tài)代碼分析器之間的區(qū)別 53

5.2 單元測試 53

5.2.1 JUnit 單元測試報告 53

5.2.2 JaCoCo 實現(xiàn)代碼覆蓋率 55

5.2.3 代碼覆蓋率越高,軟件的質(zhì)量就越高嗎 58

5.3 性能測試 59

5.3.1 準備性能測試環(huán)境 59

5.3.2 運行JMeter 測試 59

5.4 SonarQube:持續(xù)代碼質(zhì)量檢查 61

5.4.1 Maven 與SonarQube 集成 62

5.4.2 Jenkins 與SonarQube 集成 64

5.4.3 使用SonarQube Scanner 實現(xiàn)代碼掃描 67

5.4.4 SonarQube 集成p3c 68

5.4.5 將分析報告推送到GitLab 70

5.5 Allure 測試報告:更美觀的測試報告 72

5.5.1 Allure 測試報告介紹 72

5.5.2 集成Allure、Maven、Jenkins 73

5.6 當我們談質(zhì)量時,談的是什么 76

5.7 本章小結 76

6 觸發(fā)pipeline 執(zhí)行77

6.1 什么是觸發(fā)條件 77

6.2 時間觸發(fā) 77

6.2.1 定時執(zhí)行:cron 77

6.2.2 輪詢代碼倉庫:pollSCM 79

6.3 事件觸發(fā) 79

6.3.1 由上游任務觸發(fā):upstream 79

6.3.2 GitLab 通知觸發(fā) 80

6.3.3 在pipeline 中實現(xiàn)GitLab trigger 84

6.4 將構建狀態(tài)信息推送到GitLab 85

6.5 使用Generic Webhook Trigger 插件實現(xiàn)觸發(fā) 87

6.5.1 從Webhook 請求中提取參數(shù)值 89

6.5.2 觸發(fā)具體某個Jenkins 項目 90

6.5.3 根據(jù)請求參數(shù)值判斷是否觸發(fā)Jenkins 項目執(zhí)行 91

6.5.4 控制打印內(nèi)容 91

6.5.5 控制響應 92

6.6 本章小結 92

7 多分支構建93

7.1 創(chuàng)建多分支pipeline 93

7.2 根據(jù)分支部署到不同的環(huán)境 96

7.3 when 指令的用法 97

7.4 GitLab trigger 對多分支pipeline 的支持 99

7.5 Generic Webhook Trigger 插件在多分支pipeline 場景下的應用 99

7.6 本章小結 100

8 參數(shù)化pipeline 101

8.1 什么是參數(shù)化pipeline 101

8.2 使用parameters 指令 101

8.2.1 parameters 指令支持的參數(shù)類型 102

8.2.2 多參數(shù) 104

8.3 由另一個pipeline 傳參并觸發(fā) 104

8.4 使用Conditional BuildStep 插件處理復雜的判斷邏輯 106

8.5 使用input 步驟 107

8.5.1 input 步驟的簡單用法 108

8.5.2 input 步驟的復雜用法 109

8.6 小貼士 111

8.6.1 獲取上游pipeline 的信息 111

8.6.2 設置手動輸入步驟超時后,pipeline 自動中止 111

8.7 本章小結 111

9 憑證管理112

9.1 為什么要管理憑證 112

9.2 憑證是什么 112

9.3 創(chuàng)建憑證 113

9.4 常用憑證 114

9.4.1 Secret text 114

9.4.2 Username with password 115

9.4.3 Secret file 115

9.4.4 SSH Username with private key 116

9.5 優(yōu)雅地使用憑證 117

9.6 使用HashiCorp Vault 118

9.6.1 HashiCorp Vault 介紹 118

9.6.2 集成HashiCorp Vault 118

9.7 在Jenkins 日志中隱藏敏感信息 120

9.8 本章小結 122

10 制品管理123

10.1 制品是什么 123

10.2 制品管理倉庫 123

10.3 過渡到制品庫 124

10.4 管理Java 棧制品 125

10.4.1 使用Maven 發(fā)布制品到Nexus 中 125

10.4.2 使用Nexus 插件發(fā)布制品 127

10.5 使用Nexus 管理Docker 鏡像 128

10.5.1 Nexus:創(chuàng)建Docker 私有倉庫 129

10.5.2 創(chuàng)建Docker 私有倉庫憑證 130

10.5.3 構建并發(fā)布Docker 鏡像 130

10.5.4 小貼士 131

10.6 管理原始制品 131

10.6.1 創(chuàng)建raw 倉庫 131

10.6.2 上傳制品,獲取制品 132

10.7 從其他pipeline 中拷貝制品 134

10.8 版本號管理 135

10.8.1 語義化版本 135

10.8.2 版本號的作用 136

10.8.3 方便生成版本號的Version Number 插件 137

10.9 小貼士 138

10.9.1 Nexus 匿名用戶權限問題 138

10.9.2 制品庫的容量要大 139

10.10 本章小結 139

11 可視化構建及視圖140

11.1 Green Balls 插件 140

11.2 Build Monitor View 插件 141

11.3 使用視圖 143

11.3.1 使用項目的維度建立視圖 143

11.3.2 設置默認視圖 145

11.4 本章小結 146

12 自動化部署147

12.1 關于部署有什么好說的 147

12.1.1 部署不等于發(fā)布 147

12.1.2 什么是自動化部署 148

12.1.3 自動化運維工具解決的問題 148

12.2 Jenkins 集成Ansible 實現(xiàn)自動化部署 149

12.2.1 Ansible 介紹 149

12.2.2 Jenkins 與Ansible 集成 150

12.2.3 Ansible 插件詳解 153

12.3 手動部署比自動化部署更可靠嗎 156

12.4 如何開始自動化部署 157

12.5 小貼士 158

12.6 本章小結 159

13 通知160

13.1 郵件通知 160

13.1.1 使用Jenkins 內(nèi)置郵件通知功能 160

13.1.2 使用Email Extension 插件發(fā)送通知 162

13.2 釘釘通知 164

13.3 HTTP 請求通知 166

13.4 本章小結 168

14 分布式構建與并行構建 169

14.1 Jenkins 架構 169

14.2 增加agent 170

14.2.1 對agent 打標簽 170

14.2.2 通過JNLP 協(xié)議增加agent 171

14.2.3 通過JNLP 協(xié)議增加Windows agent 175

14.2.4 通過Swarm 插件增加agent 175

14.2.5 agent 部分詳解 176

14.2.6 小結 180

14.3 將構建任務交給Docker 180

14.3.1 在Jenkins agent 上安裝Docker 180

14.3.2 使用Docker 180

14.3.3 配置Docker 私有倉庫 181

14.4 并行構建 182

14.4.1 在不同的分支上應用并行構建 183

14.4.2 并行步驟 184

14.4.3 并行階段與并行步驟之間的區(qū)別 185

14.5 本章小結 185

15 擴展pipeline 186

15.1 為什么要擴展pipeline 186

15.2 在pipeline 中定義函數(shù) 186

15.3 使用共享庫擴展 187

15.3.1 創(chuàng)建共享庫 187

15.3.2 使用共享庫 189

15.3.3 @Library 的更多用法 189

15.3.4 共享庫結構詳細介紹 190

15.3.5 使用共享庫實現(xiàn)pipeline 模板 192

15.4 通過Jenkins 插件實現(xiàn)pipeline 步驟 193

15.4.1 生成Jenkins 插件代碼骨架 193

15.4.2 啟動Jenkins 測試:mvn hpi:run 196

15.4.3 在Jenkinsfile 中使用greet 步驟 196

15.4.4 全局配置插件 197

15.5 本章小結 199

16 Jenkins 運維200

16.1 認證管理 200

16.1.1 使用Jenkins 自帶的用戶數(shù)據(jù)庫 200

16.1.2 使用LDAP 認證 202

16.2 授權管理 204

16.2.1 使用Role-based Authorization Strategy 插件授權 205

16.2.2 管理角色 206

16.2.3 權限大全 207

16.2.4 角色分配 208

16.2.5 小結 210

16.3 Jenkins 監(jiān)控 210

16.3.1 使用Monitoring 插件監(jiān)控 210

16.3.2 使用Prometheus 監(jiān)控 211

16.4 Jenkins 備份 213

16.4.1 JENKINS_HOME 介紹 213

16.4.2 使用Periodic Backup 插件進行備份 214

16.5 漢化 216

16.6 Jenkins 配置即代碼 216

16.7 使用init.groovy 配置Jenkins 217

16.8 本章小結 219

17 自動化運維經(jīng)驗 220

17.1 小團隊自動化運維實踐經(jīng)驗 220

17.1.1 先做監(jiān)控和告警 220

17.1.2 一開始就應該做配置版本化 223

17.1.3 Jenkins 化:將打包工作交給Jenkins 223

17.1.4 將制品交給Nexus 管理 224

17.1.5 讓Jenkins 幫助我們執(zhí)行Ansible 225

17.1.6 小結 225

17.2 ChatOps 實踐 226

17.2.1 Rocket.Chat 226

17.2.2 Hubot 227

17.2.3 Hubot 與Jenkins 集成 229

17.2.4 Jenkins 推送消息到Rocket.Chat 231

17.3 本章小結 231

18 如何設計pipeline 232

18.1 設計pipeline 的步驟 232

18.2 以X 網(wǎng)站為例,設計pipeline 233

18.3 X 網(wǎng)站pipeline 詳解 236

18.3.1 盡可能將所有的具體操作都隱藏到共享庫中 236

18.3.2 只生成一次制品 236

18.3.3 對不同環(huán)境采用同一種部署方式 237

18.3.4 配置版本化 238

18.3.5 系統(tǒng)集成測試 238

18.3.6 如何實現(xiàn)指定版本部署 238

18.3.7 主干開發(fā),分支發(fā)布 239

18.4 本章小結239


前言/序言

2016年4月Jenkins發(fā)布了2.0 版本(https://jenkins.io/blog/2016/04/26/jenkins-20-is-here/),開始支持pipeline as code。同年11 月,pipeline as code作為“采用”項出現(xiàn)在ThoughtWorks 技術雷達(https://www.infoq.cn/article/2016%2F11%2Fthoughtworks-radar-forecast)的采用環(huán)中。

2019 年1 月,筆者見同行在微信群里吐槽Jenkins的老舊,比如Jenkins不支持手動stage。經(jīng)過了解,筆者大概猜到這位朋友還在使用Jenkins 1.x,或者知識還停留在Jenkins 1.x上。因為他說的問題,在Jenkins 2.x中已經(jīng)不存在了。

這里并不是想說這位朋友不了解Jenkins 2.x,而是想說Jenkins 1.x 已經(jīng)成為過去式。長期以來,在中文網(wǎng)站上能搜到的關于Jenkins 的文章大多停留在Jenkins 1.x 時代。這樣想來,也就能理解為什么這位朋友會有這樣的誤解了。

自Jenkins 2.0 發(fā)布已有三個年頭,據(jù)筆者所知,目前市面上還沒有pipeline as code 實踐方面的書籍。中文的Jenkins書籍,只有《Jenkins 權威指南》一本,其中也并沒有pipeline as code 方面的介紹。本書彌補了這一空白,系統(tǒng)地介紹了Jenkins 2.x的pipeline as code。

本書第1章介紹筆者對軟件工程生產(chǎn)力的獨到見解;第2章通過一個Hello world 示例帶領初學者入門Jenkins pipeline;第3章詳細介紹Jenkins pipeline 的語法;第4-14章介紹在Jenkins pipeline 中如何實現(xiàn)持續(xù)集成、持續(xù)交付的各個階段,包括構建、測試、制品管理、部署等;第15章介紹擴展Jenkins pipeline的多種方式,本章對希望通過Jenkins實現(xiàn)持續(xù)集成、持續(xù)交付平臺的讀者非常有幫助;第16章介紹Jenkins 運維相關知識;第17章介紹筆者整合Jenkins與多個第三方系統(tǒng),實現(xiàn)ChatOps及自動化運維的經(jīng)驗;為避免讀者出現(xiàn)“不知從哪里下手”的情況,第18章通過一個簡單的案例介紹如何設計pipeline。

筆者建議所有讀者都要閱讀第1章和第3章,它們是本書的核心;已經(jīng)入門了Jenkins pipeline的讀者可以跳過第2章;而第4-14章可以作為參考手冊使用。

本書適合對Jenkins有初步認識,希望通過Jenkins實現(xiàn)持續(xù)集成、持續(xù)交付、DevOps的技術人員,以及希望了解pipeline as code技術在實際工作中如何應用的讀者。

最后,感謝策劃編輯鄭柳潔女士為本書付出的努力;感謝劉杜康和黃獻華在百忙之中對部分章節(jié)的審校;感謝黃峰達在出版方面的幫助;感謝王曉峰在部署目錄命名方面的建議;感謝志平幫助處理我的個人照片;感謝妻子的理解與支持。


點此下載


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號