Jenkins 2.x實(shí)踐指南(博文視點(diǎn)出品)

2021-05-18 21:32 更新

Jenkins 2.x實(shí)踐指南(博文視點(diǎn)出品)

翟志軍 著

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

點(diǎn)此下載


編輯推薦

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

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

內(nèi)容簡介

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

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

目錄

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

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

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

1.1.2 從勞動(dòng)對象要素考慮提高軟件工程生產(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 本章小結(jié) 5

2 pipeline 入門6

2.1 pipeline 是什么 6

2.2 Jenkinsfile 又是什么 7

2.3 pipeline 語法的選擇 7

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

2.5 從版本控制庫拉取pipeline 11

2.6 使用Maven 構(gòu)建Java 應(yīng)用 12

2.7 本章小結(jié) 15

3 pipeline 語法講解16

3.1 必要的Groovy 知識 16

3.2 pipeline 的組成 18

3.2.1 pipeline 最簡結(jié)構(gòu) 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)置基礎(chǔ)步驟 25

3.7.1 文件目錄相關(guān)步驟 25

3.7.2 制品相關(guān)步驟 27

3.7.3 命令相關(guān)步驟 28

3.7.4 其他步驟 29

3.7.5 小貼士 31

3.8 本章小結(jié) 36

4 環(huán)境變量與構(gòu)建工具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 構(gòu)建工具 40

4.2.1 構(gòu)建工具的選擇 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)境變量支持更多的構(gòu)建工具 47

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

4.5 本章小結(jié) 49

5 代碼質(zhì)量50

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

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

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

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

5.2 單元測試 53

5.2.1 JUnit 單元測試報(bào)告 53

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

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

5.3 性能測試 59

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

5.3.2 運(yùn)行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 實(shí)現(xiàn)代碼掃描 67

5.4.4 SonarQube 集成p3c 68

5.4.5 將分析報(bào)告推送到GitLab 70

5.5 Allure 測試報(bào)告:更美觀的測試報(bào)告 72

5.5.1 Allure 測試報(bào)告介紹 72

5.5.2 集成Allure、Maven、Jenkins 73

5.6 當(dāng)我們談質(zhì)量時(shí),談的是什么 76

5.7 本章小結(jié) 76

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

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

6.2 時(shí)間觸發(fā) 77

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

6.2.2 輪詢代碼倉庫:pollSCM 79

6.3 事件觸發(fā) 79

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

6.3.2 GitLab 通知觸發(fā) 80

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

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

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

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

6.5.2 觸發(fā)具體某個(gè)Jenkins 項(xiàng)目 90

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

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

6.5.5 控制響應(yīng) 92

6.6 本章小結(jié) 92

7 多分支構(gòu)建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 場景下的應(yīng)用 99

7.6 本章小結(jié) 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 由另一個(gè)pipeline 傳參并觸發(fā) 104

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

8.5 使用input 步驟 107

8.5.1 input 步驟的簡單用法 108

8.5.2 input 步驟的復(fù)雜用法 109

8.6 小貼士 111

8.6.1 獲取上游pipeline 的信息 111

8.6.2 設(shè)置手動(dòng)輸入步驟超時(shí)后,pipeline 自動(dòng)中止 111

8.7 本章小結(jié) 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 本章小結(jié) 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 構(gòu)建并發(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 匿名用戶權(quán)限問題 138

10.9.2 制品庫的容量要大 139

10.10 本章小結(jié) 139

11 可視化構(gòu)建及視圖140

11.1 Green Balls 插件 140

11.2 Build Monitor View 插件 141

11.3 使用視圖 143

11.3.1 使用項(xiàng)目的維度建立視圖 143

11.3.2 設(shè)置默認(rèn)視圖 145

11.4 本章小結(jié) 146

12 自動(dòng)化部署147

12.1 關(guān)于部署有什么好說的 147

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

12.1.2 什么是自動(dòng)化部署 148

12.1.3 自動(dòng)化運(yùn)維工具解決的問題 148

12.2 Jenkins 集成Ansible 實(shí)現(xiàn)自動(dòng)化部署 149

12.2.1 Ansible 介紹 149

12.2.2 Jenkins 與Ansible 集成 150

12.2.3 Ansible 插件詳解 153

12.3 手動(dòng)部署比自動(dòng)化部署更可靠嗎 156

12.4 如何開始自動(dòng)化部署 157

12.5 小貼士 158

12.6 本章小結(jié) 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 本章小結(jié) 168

14 分布式構(gòu)建與并行構(gòu)建 169

14.1 Jenkins 架構(gòu) 169

14.2 增加agent 170

14.2.1 對agent 打標(biāo)簽 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 小結(jié) 180

14.3 將構(gòu)建任務(wù)交給Docker 180

14.3.1 在Jenkins agent 上安裝Docker 180

14.3.2 使用Docker 180

14.3.3 配置Docker 私有倉庫 181

14.4 并行構(gòu)建 182

14.4.1 在不同的分支上應(yīng)用并行構(gòu)建 183

14.4.2 并行步驟 184

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

14.5 本章小結(jié) 185

15 擴(kuò)展pipeline 186

15.1 為什么要擴(kuò)展pipeline 186

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

15.3 使用共享庫擴(kuò)展 187

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

15.3.2 使用共享庫 189

15.3.3 @Library 的更多用法 189

15.3.4 共享庫結(jié)構(gòu)詳細(xì)介紹 190

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

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

15.4.1 生成Jenkins 插件代碼骨架 193

15.4.2 啟動(dòng)Jenkins 測試:mvn hpi:run 196

15.4.3 在Jenkinsfile 中使用greet 步驟 196

15.4.4 全局配置插件 197

15.5 本章小結(jié) 199

16 Jenkins 運(yùn)維200

16.1 認(rèn)證管理 200

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

16.1.2 使用LDAP 認(rèn)證 202

16.2 授權(quán)管理 204

16.2.1 使用Role-based Authorization Strategy 插件授權(quán) 205

16.2.2 管理角色 206

16.2.3 權(quán)限大全 207

16.2.4 角色分配 208

16.2.5 小結(jié) 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 插件進(jìn)行備份 214

16.5 漢化 216

16.6 Jenkins 配置即代碼 216

16.7 使用init.groovy 配置Jenkins 217

16.8 本章小結(jié) 219

17 自動(dòng)化運(yùn)維經(jīng)驗(yàn) 220

17.1 小團(tuán)隊(duì)自動(dòng)化運(yùn)維實(shí)踐經(jīng)驗(yàn) 220

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

17.1.2 一開始就應(yīng)該做配置版本化 223

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

17.1.4 將制品交給Nexus 管理 224

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

17.1.6 小結(jié) 225

17.2 ChatOps 實(shí)踐 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 本章小結(jié) 231

18 如何設(shè)計(jì)pipeline 232

18.1 設(shè)計(jì)pipeline 的步驟 232

18.2 以X 網(wǎng)站為例,設(shè)計(jì)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 如何實(shí)現(xiàn)指定版本部署 238

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

18.4 本章小結(jié)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àng)出現(xiàn)在ThoughtWorks 技術(shù)雷達(dá)(https://www.infoq.cn/article/2016%2F11%2Fthoughtworks-radar-forecast)的采用環(huán)中。

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

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

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

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

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

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

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


點(diǎn)此下載


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號